Change: add OPEN-O seed code for VF-C 49/5649/1
authorvictor.gao <victor.gao@huawei.com>
Mon, 3 Jul 2017 03:44:26 +0000 (11:44 +0800)
committervictor.gao <victor.gao@huawei.com>
Mon, 3 Jul 2017 03:44:26 +0000 (11:44 +0800)
Change-Id: Iecacac039e86db2eae006c8947d6dd681e458b83
Signed-off-by: victor.gao <victor.gao@huawei.com>
164 files changed:
huawei/vnfmadapter/VnfmadapterService/deployment/pom.xml [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/README.txt [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/bin/init_db.sh [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/bin/start.sh [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/bin/stop.sh [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/catalina.policy [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/catalina.properties [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/context.xml [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/logging.properties [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/server.p12 [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/server.xml [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/trust.jks [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/web.xml [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/db/mysql/db-schema.sql [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/adapterInfo/vnfmadapter2drivermgr.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/adapterInfo/vnfmadapterinfo.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/restclient.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/server.p12 [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/sslconf.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/trust.jks [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/vnfpkginfo/vnfd_ids.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/vnfpkginfo/vnfpkginfo.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/pom.xml [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/pom.xml [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/mocoserver/VnfmAdapterSuccessServer.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITAuthRoaFail.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITAuthRoaSuccess.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfAdapterResourceRoaFail.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfAdapterResourceRoaSuccess.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfResourceRoaFail.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfResourceRoaSuccess.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfRoaFail.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfRoaSuccess.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/AddSuccessChecker.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/FailureChecker.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/GetSuccessChecker.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/MyChecker.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/MyTestManager.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/SuccessChecker.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/server.properties [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/urlconfig.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/addauthinfo.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getallcloudinfo.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getauthinfo.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getcsarinfo.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getjob.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnf.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnfdplaninfo.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnfdversion.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnfminfo.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/grantvnfresource.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/removevnf.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/uploadvnfpackage.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/authroa/addauthinfofail.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/authroa/addauthinfosuccess.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfadapterresourceroa/querygetallcloudinfofail.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfadapterresourceroa/querygetallcloudinfosuccess.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfresourceroa/grantvnfresourcefail.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfresourceroa/grantvnfresourcesuccess.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/addvnffail.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/addvnfsuccess.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/deletevnffail.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/deletevnfsuccess.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getjobfail.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getjobsuccess.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getvnffail.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getvnfsuccess.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/AsyncCallback.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/DownloadCsarManager.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/RegisterConfigInfo.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/ResultRequestUtil.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/VnfmException.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/VnfmJsonUtil.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/VnfmUtil.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/servicetoken/HttpRestfulHelp.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VNFRestfulUtil.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VnfmRestfulUtil.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/activator/RoaVnfmService2DriverMgr.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/activator/RoaVnfmServicePostProcessor.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/AdapterResourceManager.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/Driver2MSBManager.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/VnfmAdapter2DriverManager.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/inf/IDriver2MSBManager.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/inf/IResourceManager.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/inf/IVnfmAdapter2DriverManager.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/impl/VnfmAdapter2DriverMgrService.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/impl/VnfmAdapterMgrService.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/inf/IVnfmAdapter2DriverMgrService.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/inf/IVnfmAdapterMgrService.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/constant/Constant.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/constant/ParamConstants.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/constant/UrlConstant.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/api/ConnectInfo.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/AbstractSslContext.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/ConnectMgrVnfm.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/HttpRequests.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslAnonymousSocket.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslCertificateSocket.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslProtocolSocketFactory.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/inf/InterfaceConnectMgr.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/inf/InterfaceVnfMgr.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/vnf/VnfMgrVnfm.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/dao/impl/VnfmDaoImpl.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/dao/inf/AbstractDao.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/dao/inf/VnfmDao.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/entity/Vnfm.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/mapper/VnfmMapper.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/AuthMgr.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/RegisterMgr.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/VnfMgr.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/VnfResourceMgr.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/AuthRoa.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/SwaggerRoa.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/VnfAdapterResourceRoa.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/VnfResourceRoa.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/VnfRoa.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ExceptionMessage.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/GenericExceptionMapper.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ServiceExceptionMapper.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/log4j.properties [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/mybatis/mysql/vnfmadapter.xml [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/registerService.properties [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/spring/Vnfmadapter/services.xml [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/spring/Vnfmadapter/svc_register.xml [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/swagger.json [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/main/webapp/WEB-INF/web.xml [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/DownloadCsarManagerTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/FileUtil.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/ResultRequestUtilTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/VnfmUtilTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/servicetoken/HttpRestfulHelpTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VNFRestfulUtilTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VnfmRestfulUtilTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/activator/RoaVnfmServicePostProcessorTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/activator/TestRoaVnfmService2DriverMgr.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/AdapterResourceManagerTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/Driver2MSBManagerTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/VnfmAdapter2DriverManagerTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/ai/internalsvc/impl/VnfmAdapter2DriverMgrServiceTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/ai/internalsvc/impl/VnfmAdapterMgrServiceTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/constant/TestConstant.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/api/ConnectInfoTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/AbstractSslContextTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/HttpRequestsTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslAnonymousSocketTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslCertificateSocketTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslProtocolSocketFactoryTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/vnf/VnfMgrVnfmTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/dao/impl/VnfmDaoImplTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/entity/VnfmTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/AuthMgrTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/RegisterMgrTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/VnfMgrTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/VnfResourceMgrTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/AuthRoaTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/SwaggerRoaTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/VnfAdapterResourceRoaTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/VnfResourceRoaTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/VnfRoaTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ExceptionMessageTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/GenericExceptionMapperTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ServiceExceptionMapperTest.java [new file with mode: 0644]
huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/testutils/JsonUtil.java [new file with mode: 0644]
huawei/vnfmadapter/pom.xml [new file with mode: 0644]

diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/pom.xml b/huawei/vnfmadapter/VnfmadapterService/deployment/pom.xml
new file mode 100644 (file)
index 0000000..27bfbf3
--- /dev/null
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2016, Huawei Technologies Co., Ltd.
+
+    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.
+ -->
+<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>
+    <parent>
+        <groupId>org.openo.nfvo</groupId>
+        <artifactId>vnfmadapter-service-root</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>hw-vnfmadapter-deployment</artifactId>
+    <packaging>pom</packaging>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.gmaven</groupId>
+                <artifactId>gmaven-plugin</artifactId>
+                <version>1.5</version>
+                <executions>
+                    <execution>
+                        <id>vnfmadapter package</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>execute</goal>
+                        </goals>
+                        <configuration>
+                            <source>
+                                System.out.println("******** Going to make release zip ********")
+
+                                deployFolder =
+                                "${project.build.directory}/deployoutput"
+                                deployUnzip =
+                                "${project.build.directory}/deployunzip"
+                                outfileName =
+                                "${package.name}-${project.version}.zip"
+                                ant.delete(dir: "${deployFolder}")
+                                ant.mkdir(dir:
+                                "${deployFolder}")
+
+                                ant.delete(dir: "${deployUnzip}")
+                                ant.mkdir(dir: "${deployUnzip}")
+
+                                ant.mkdir(dir:
+                                "${deployUnzip}/webapps/")
+                                ant.mkdir(dir: "${deployUnzip}/webapps/ROOT")
+                                ant.mkdir(dir:
+                                "${deployUnzip}/logs")
+
+                                ant.copy(todir: "${deployUnzip}") {
+                                fileset(dir: "${basedir}/src/main/release"){
+                                exclude(name: "**/.gitignore")
+                                }
+                                }
+                                ant.copy(todir:
+                                "${deployUnzip}/webapps/ROOT") {
+                                fileset(dir:
+                                "${project.build.directory}/../../service/target/${package.name}-${project.version}")
+                                }
+
+                                ant.zip(destfile:
+                                "${deployFolder}/${outfileName}") {
+                                fileset(dir: "${deployUnzip}")
+                                }
+                                System.out.println("******** completed. ************")
+                            </source>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>attach-artifacts</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>attach-artifact</goal>
+                        </goals>
+                        <configuration>
+                            <artifacts>
+                                <artifact>
+                                    <file>${project.build.directory}/deployoutput/${package.name}-${project.version}.zip</file>
+                                    <type>zip</type>
+                                </artifact>
+                            </artifacts>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+
+
+        </plugins>
+    </build>
+<name>nfvo/drivers/vnfm/svnfm/huawei/vnfmadapter/VnfmadapterService/deployment</name></project>
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/README.txt b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/README.txt
new file mode 100644 (file)
index 0000000..0561cad
--- /dev/null
@@ -0,0 +1,57 @@
+Introduction:
+=============
+    This document provides the required steps for installation
+    and configuration this service.
+
+Installation steps:
+====================
+    Install following software:
+        - Java 1.8 or lattest
+        - MySql Server 5.7 or lattest.
+        - Apache Tomcat Server 8.0 or lattest
+
+    Set the following environment variables:
+        - JAVA_HOME: Set to JAVA JDK installed location
+        - CATALINIA_HOME: Set to Tomcat installed location
+        - CATALINIA_BASE: Set to the location, where this
+          service installer is unzipped, its optional
+        - PATH: Update it with the location of command 'mysql'
+
+    - In command console, cd to 'bin' directory under the location,
+      where this service installer is unzipped and
+      run ./init_db.sh <db user> <db password> <db server ip> <db port>
+        CAUTION: Existing vnfmdb will be cleaned before
+        initializing the schema, so please take a back-up of it
+        before executing it next time.
+
+Configuration steps:
+====================
+    - Update the db credetials in bean with id="source"  in 'services.xml'
+      under webapps spring directory.
+    - Update the MSB address in $PATH/etc/conf/restclient.json
+    - Update the vnfmadapter service ip address in $PATH/etc/adapterInfo/vnfmadapterinfo.json
+
+
+How to run?
+===========
+    - In command console, cd to 'bin' directory under the location,
+      where this service installer is unzipped and
+      run ./start.sh
+          NOTE: It starts the tomcat at predefined http port. To change
+          default port, update the port in tomcat configuration file
+          'conf/server.xml'
+          - Verify that 'Tomcat started.' is reported on the console.
+    - Once service is started, please verify below details:
+        - from MSB service, verify that "hwvnfm"  is reported from GET request on "/openoapi/microservices/v1/services"
+        - from this service, run one of the supported REST API mentioned in open-o NFVO wiki and verify that the
+          expected response is returned.
+How to stop?
+=============
+    - In command console, cd to 'bin' directory under the location,
+      where this service installer is unzipped and
+      run ./stop.sh
+
+Update:
+=========
+The latest information are available through the OPEN-O release notes at
+https://wiki.open-o.org/view/OPEN-O_Sun_Release_Notes
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/bin/init_db.sh b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/bin/init_db.sh
new file mode 100644 (file)
index 0000000..c1b6200
--- /dev/null
@@ -0,0 +1,61 @@
+#*******************************************************************************
+# Copyright 2016 Huawei Technologies Co., Ltd.
+#
+# 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.
+#*******************************************************************************
+#!/bin/bash
+
+cd ..
+
+if [ -z "$1" ]
+then
+    echo "usage: init_db.sh <db user> <db password> <db server ip> <db port> "
+    exit 1
+fi
+
+if [ -z "$2" ]
+then
+    echo "usage: init_db.sh <db user> <db password> <db server ip> <db port> "
+    exit 1
+fi
+
+if [ -z "$3" ]
+then
+    echo "usage: init_db.sh <db user> <db password> <db server ip> <db port> "
+    exit 1
+fi
+
+if [ -z "$4" ]
+then
+    echo "usage: init_db.sh <db user> <db password> <db server ip> <db port> "
+    exit 1
+fi
+
+echo
+echo "DB-INIT [vnfmdb] : START"
+
+mysql -u$1 -p$2 -h$3 -P$4 <$(cd `dirname $0`; pwd)/db/mysql/db-schema.sql
+
+if [ $? != 0 ] ; then
+   echo "DB-INIT [vnfmdb] : FAILED !"
+   exit 1
+fi
+
+echo "DB-INIT [vnfmdb] : PASSED"
+echo
+echo "*************************************************************"
+echo "CAUTION: Existing vnfmdb will be cleaned before"
+echo "initializing the schema, so please take a back-up of it"
+echo "before executing it next time."
+echo "*************************************************************"
+exit 0
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/bin/start.sh b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/bin/start.sh
new file mode 100644 (file)
index 0000000..ddd7d58
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# Copyright 2016 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+#!/bin/bash
+cd ..
+export CATALINA_BASE=$(cd `dirname $0`; pwd)
+
+if [ -z "$JAVA_HOME" ]
+then
+    echo "There is no JAVA_HOME"
+    exit 1
+fi
+
+if [ -z "$CATALINA_HOME" ]
+then
+    echo "There is no CATALINA_HOME"
+    exit 1
+fi
+
+if [ -z "$CATALINA_BASE" ]
+then
+    echo "There is no CATALINA_BASE"
+    exit 1
+fi
+
+export CATALINA_PID="$CATALINA_BASE/bin/catalina.pid"
+
+LOG_DIR=$CATALINA_BASE/logs
+if [ ! -d "$LOG_DIR" ]; then
+  mkdir $LOG_DIR
+fi
+
+$CATALINA_HOME/bin/catalina.sh start
+
+
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/bin/stop.sh b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/bin/stop.sh
new file mode 100644 (file)
index 0000000..a0acfe6
--- /dev/null
@@ -0,0 +1,41 @@
+#
+# Copyright 2016 Huawei Technologies Co., Ltd.
+#
+# 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.
+#
+
+#!/bin/bash
+cd ..
+export CATALINA_BASE=$(cd `dirname $0`; pwd)
+
+if [ -z "$JAVA_HOME" ]
+then
+    echo "There is no JAVA_HOME"
+    exit 1
+fi
+
+if [ -z "$CATALINA_HOME" ]
+then
+    echo "There is no CATALINA_HOME"
+    exit 1
+fi
+
+export CATALINA_PID="$CATALINA_BASE/bin/catalina.pid"
+
+if [ -z "$CATALINA_BASE" ]
+then
+    echo "There is no CATALINA_BASE"
+    exit 1
+fi
+
+$CATALINA_HOME/bin/catalina.sh stop -force
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/catalina.policy b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/catalina.policy
new file mode 100644 (file)
index 0000000..9f99104
--- /dev/null
@@ -0,0 +1,212 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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.
+
+// ============================================================================
+// catalina.policy - Security Policy Permissions for Tomcat 7
+//
+// This file contains a default set of security policies to be enforced (by the
+// JVM) when Catalina is executed with the "-security" option.  In addition
+// to the permissions granted here, the following additional permissions are
+// granted to each web application:
+//
+// * Read access to the web application's document root directory
+// * Read, write and delete access to the web application's working directory
+// ============================================================================
+
+
+// ========== SYSTEM CODE PERMISSIONS =========================================
+
+
+// These permissions apply to javac
+grant codeBase "file:${java.home}/lib/-" {
+        permission java.security.AllPermission;
+};
+
+// These permissions apply to all shared system extensions
+grant codeBase "file:${java.home}/jre/lib/ext/-" {
+        permission java.security.AllPermission;
+};
+
+// These permissions apply to javac when ${java.home] points at $JAVA_HOME/jre
+grant codeBase "file:${java.home}/../lib/-" {
+        permission java.security.AllPermission;
+};
+
+// These permissions apply to all shared system extensions when
+// ${java.home} points at $JAVA_HOME/jre
+grant codeBase "file:${java.home}/lib/ext/-" {
+        permission java.security.AllPermission;
+};
+
+
+// ========== CATALINA CODE PERMISSIONS =======================================
+
+
+// These permissions apply to the daemon code
+grant codeBase "file:${catalina.home}/bin/commons-daemon.jar" {
+        permission java.security.AllPermission;
+};
+
+
+grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
+        permission java.io.FilePermission
+         "${java.home}${file.separator}lib${file.separator}logging.properties", "read";
+
+        permission java.io.FilePermission
+         "${catalina.base}${file.separator}conf${file.separator}logging.properties", "read";
+        permission java.io.FilePermission
+         "${catalina.base}${file.separator}logs", "read, write";
+        permission java.io.FilePermission
+         "${catalina.base}${file.separator}logs${file.separator}*", "read, write";
+
+        permission java.lang.RuntimePermission "shutdownHooks";
+        permission java.lang.RuntimePermission "getClassLoader";
+        permission java.lang.RuntimePermission "setContextClassLoader";
+
+        permission java.util.logging.LoggingPermission "control";
+
+        permission java.util.PropertyPermission "java.util.logging.config.class", "read";
+        permission java.util.PropertyPermission "java.util.logging.config.file", "read";
+        permission java.util.PropertyPermission "org.apache.juli.ClassLoaderLogManager.debug", "read";
+        permission java.util.PropertyPermission "catalina.base", "read";
+
+
+};
+
+// These permissions apply to the server startup code
+grant codeBase "file:${catalina.home}/bin/bootstrap.jar" {
+        permission java.security.AllPermission;
+};
+
+// These permissions apply to the servlet API classes
+// and those that are shared across all class loaders
+// located in the "lib" directory
+grant codeBase "file:${catalina.home}/lib/-" {
+        permission java.security.AllPermission;
+};
+
+
+
+// ========== WEB APPLICATION PERMISSIONS =====================================
+
+
+// These permissions are granted by default to all web applications
+// In addition, a web application will be given a read FilePermission
+// and JndiPermission for all files and directories in its document root.
+grant {
+    // Required for JNDI lookup of named JDBC DataSource's and
+    // javamail named MimePart DataSource used to send mail
+    permission java.util.PropertyPermission "java.home", "read";
+    permission java.util.PropertyPermission "java.naming.*", "read";
+    permission java.util.PropertyPermission "javax.sql.*", "read";
+
+    // OS Specific properties to allow read access
+    permission java.util.PropertyPermission "os.name", "read";
+    permission java.util.PropertyPermission "os.version", "read";
+    permission java.util.PropertyPermission "os.arch", "read";
+    permission java.util.PropertyPermission "file.separator", "read";
+    permission java.util.PropertyPermission "path.separator", "read";
+    permission java.util.PropertyPermission "line.separator", "read";
+
+    // JVM properties to allow read access
+    permission java.util.PropertyPermission "java.version", "read";
+    permission java.util.PropertyPermission "java.vendor", "read";
+    permission java.util.PropertyPermission "java.vendor.url", "read";
+    permission java.util.PropertyPermission "java.class.version", "read";
+    permission java.util.PropertyPermission "java.specification.version", "read";
+    permission java.util.PropertyPermission "java.specification.vendor", "read";
+    permission java.util.PropertyPermission "java.specification.name", "read";
+
+    permission java.util.PropertyPermission "java.vm.specification.version", "read";
+    permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
+    permission java.util.PropertyPermission "java.vm.specification.name", "read";
+    permission java.util.PropertyPermission "java.vm.version", "read";
+    permission java.util.PropertyPermission "java.vm.vendor", "read";
+    permission java.util.PropertyPermission "java.vm.name", "read";
+
+    // Required for OpenJMX
+    permission java.lang.RuntimePermission "getAttribute";
+
+    // Allow read of JAXP compliant XML parser debug
+    permission java.util.PropertyPermission "jaxp.debug", "read";
+
+    // All JSPs need to be able to read this package
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat";
+
+    // Precompiled JSPs need access to these packages.
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.el";
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime";
+    permission java.lang.RuntimePermission
+     "accessClassInPackage.org.apache.jasper.runtime.*";
+
+    // Precompiled JSPs need access to these system properties.
+    permission java.util.PropertyPermission
+     "org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER", "read";
+    permission java.util.PropertyPermission
+     "org.apache.el.parser.COERCE_TO_ZERO", "read";
+
+    // The cookie code needs these.
+    permission java.util.PropertyPermission
+     "org.apache.catalina.STRICT_SERVLET_COMPLIANCE", "read";
+    permission java.util.PropertyPermission
+     "org.apache.tomcat.util.http.ServerCookie.STRICT_NAMING", "read";
+    permission java.util.PropertyPermission
+     "org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR", "read";
+
+    // Applications using Comet need to be able to access this package
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.comet";
+
+    // Applications using the legacy WebSocket implementation need to be able to access this package
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.websocket";
+
+    // Applications using the JSR-356 WebSocket implementation need to be able to access these packages
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket";
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server";
+};
+
+
+// The Manager application needs access to the following packages to support the
+// session display functionality. These settings support the following
+// configurations:
+// - default CATALINA_HOME == CATALINA_BASE
+// - CATALINA_HOME != CATALINA_BASE, per instance Manager in CATALINA_BASE
+// - CATALINA_HOME != CATALINA_BASE, shared Manager in CATALINA_HOME
+grant codeBase "file:${catalina.base}/webapps/manager/-" {
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina";
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session";
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager";
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util";
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util";
+};
+grant codeBase "file:${catalina.home}/webapps/manager/-" {
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina";
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session";
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager";
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util";
+    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util";
+};
+
+// You can assign additional permissions to particular web applications by
+// adding additional "grant" entries here, based on the code base for that
+// application, /WEB-INF/classes/, or /WEB-INF/lib/ jar files.
+//
+// Different permissions can be granted to JSP pages, classes loaded from
+// the /WEB-INF/classes/ directory, all jar files in the /WEB-INF/lib/
+// directory, or even to individual jar files in the /WEB-INF/lib/ directory.
+//
+// For instance, assume that the standard "examples" application
+// included a JDBC driver that needed to establish a network connection to the
+// corresponding database and used the scrape taglib to get the weather from
+// the NOAA web server.  You might create a "grant" entries like this:
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/catalina.properties b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/catalina.properties
new file mode 100644 (file)
index 0000000..a2393bb
--- /dev/null
@@ -0,0 +1,130 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageAccess unless the
+# corresponding RuntimePermission ("accessClassInPackage."+package) has
+# been granted.
+package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,\
+org.apache.naming.resources.,org.apache.tomcat.
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageDefinition unless the
+# corresponding RuntimePermission ("defineClassInPackage."+package) has
+# been granted.
+#
+# by default, no packages are restricted for definition, and none of
+# the class loaders supplied with the JDK call checkPackageDefinition.
+#
+package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,\
+org.apache.jasper.,org.apache.naming.,org.apache.tomcat.
+
+#
+#
+# List of comma-separated paths defining the contents of the "common"
+# classloader. Prefixes should be used to define what is the repository type.
+# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
+# If left as blank,the JVM system loader will be used as Catalina's "common"
+# loader.
+# Examples:
+#     "foo": Add this folder as a class repository
+#     "foo/*.jar": Add all the JARs of the specified folder as class
+#                  repositories
+#     "foo/bar.jar": Add bar.jar as a class repository
+common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
+
+#
+# List of comma-separated paths defining the contents of the "server"
+# classloader. Prefixes should be used to define what is the repository type.
+# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
+# If left as blank, the "common" loader will be used as Catalina's "server"
+# loader.
+# Examples:
+#     "foo": Add this folder as a class repository
+#     "foo/*.jar": Add all the JARs of the specified folder as class
+#                  repositories
+#     "foo/bar.jar": Add bar.jar as a class repository
+server.loader=
+
+#
+# List of comma-separated paths defining the contents of the "shared"
+# classloader. Prefixes should be used to define what is the repository type.
+# Path may be relative to the CATALINA_BASE path or absolute. If left as blank,
+# the "common" loader will be used as Catalina's "shared" loader.
+# Examples:
+#     "foo": Add this folder as a class repository
+#     "foo/*.jar": Add all the JARs of the specified folder as class
+#                  repositories
+#     "foo/bar.jar": Add bar.jar as a class repository
+# Please note that for single jars, e.g. bar.jar, you need the URL form
+# starting with file:.
+shared.loader=
+
+# List of JAR files that should not be scanned using the JarScanner
+# functionality. This is typically used to scan JARs for configuration
+# information. JARs that do not contain such information may be excluded from
+# the scan to speed up the scanning process. This is the default list. JARs on
+# this list are excluded from all scans. Scan specific lists (to exclude JARs
+# from individual scans) follow this. The list must be a comma separated list of
+# JAR file names.
+# The JARs listed below include:
+# - Tomcat Bootstrap JARs
+# - Tomcat API JARs
+# - Catalina JARs
+# - Jasper JARs
+# - Tomcat JARs
+# - Common non-Tomcat JARs
+# - Test JARs (JUnit, Cobertura and dependencies)
+tomcat.util.scan.DefaultJarScanner.jarsToSkip=\
+bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\
+annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,websocket-api.jar,\
+catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,\
+jasper.jar,jasper-el.jar,ecj-*.jar,\
+tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,\
+tomcat-jni.jar,tomcat-spdy.jar,\
+tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,\
+tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,\
+tomcat-jdbc.jar,\
+tools.jar,\
+commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,\
+commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,\
+commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,\
+commons-math*.jar,commons-pool*.jar,\
+jstl.jar,\
+geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,\
+ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,\
+jmx-tools.jar,jta*.jar,log4j.jar,log4j-1*.jar,mail*.jar,slf4j*.jar,\
+xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,\
+junit.jar,junit-*.jar,hamcrest*.jar,org.hamcrest*.jar,ant-launcher.jar,\
+cobertura-*.jar,asm-*.jar,dom4j-*.jar,icu4j-*.jar,jaxen-*.jar,jdom-*.jar,\
+jetty-*.jar,oro-*.jar,servlet-api-*.jar,tagsoup-*.jar,xmlParserAPIs-*.jar,\
+xom-*.jar
+
+# Additional JARs (over and above the default JARs listed above) to skip when
+# scanning for Servlet 3.0 pluggability features. These features include web
+# fragments, annotations, SCIs and classes that match @HandlesTypes. The list
+# must be a comma separated list of JAR file names.
+org.apache.catalina.startup.ContextConfig.jarsToSkip=
+
+# Additional JARs (over and above the default JARs listed above) to skip when
+# scanning for TLDs. The list must be a comma separated list of JAR file names.
+org.apache.catalina.startup.TldConfig.jarsToSkip=tomcat7-websocket.jar
+
+#
+# String cache configuration.
+tomcat.util.buf.StringCache.byte.enabled=true
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/context.xml b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/context.xml
new file mode 100644 (file)
index 0000000..64de61f
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<!-- The contents of this file will be loaded for each web application -->
+<Context>
+
+    <!-- Default set of monitored resources. If one of these changes, the    -->
+    <!-- web application will be reloaded.                                   -->
+    <WatchedResource>WEB-INF/web.xml</WatchedResource>
+    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
+
+    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
+    <!--
+    <Manager pathname="" />
+    -->
+</Context>
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/logging.properties b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/logging.properties
new file mode 100644 (file)
index 0000000..a2ad9c2
--- /dev/null
@@ -0,0 +1,70 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
+
+.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
+
+############################################################
+# Handler specific properties.
+# Describes specific configuration info for Handlers.
+############################################################
+
+1catalina.org.apache.juli.AsyncFileHandler.level = FINE
+1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
+1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
+
+2localhost.org.apache.juli.AsyncFileHandler.level = FINE
+2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
+2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
+
+3manager.org.apache.juli.AsyncFileHandler.level = FINE
+3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
+3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
+
+4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
+4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
+4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
+
+java.util.logging.ConsoleHandler.level = FINE
+java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
+
+
+############################################################
+# Facility specific properties.
+# Provides extra control for each logger.
+############################################################
+
+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler
+
+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler
+
+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler
+
+# For example, set the org.apache.catalina.util.LifecycleBase logger to log
+# each component that extends LifecycleBase changing state:
+#org.apache.catalina.util.LifecycleBase.level = FINE
+
+# To see debug messages in TldLocationsCache, uncomment the following line:
+#org.apache.jasper.compiler.TldLocationsCache.level = FINE
+
+# To see debug messages for HTTP/2 handling, uncomment the following line:
+#org.apache.coyote.http2.level = FINE
+
+# To see debug messages for WebSocket handling, uncomment the following line:
+#org.apache.tomcat.websocket.level = FINE
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/server.p12 b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/server.p12
new file mode 100644 (file)
index 0000000..5bc1b7a
Binary files /dev/null and b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/server.p12 differ
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/server.xml b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/server.xml
new file mode 100644 (file)
index 0000000..91ca122
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<!-- Note:  A "Server" is not itself a "Container", so you may not
+     define subcomponents such as "Valves" at this level.
+     Documentation at /docs/config/server.html
+ -->
+<Server port="9482" shutdown="SHUTDOWN">
+    <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
+    <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener" />
+    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
+    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
+    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
+    <GlobalNamingResources>
+        <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
+            name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" />
+    </GlobalNamingResources>
+    <Service name="Catalina">
+        <Connector connectionTimeout="20000" port="8482" protocol="HTTP/1.1" redirectPort="8443" />
+        <Connector port="8821" protocol="AJP/1.3" redirectPort="8443" />
+        <Connector port="8443" protocol="HTTP/1.1"
+            SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" 
+            keystoreFile="conf/server.p12" keystorePass="Changeme_123" keystoreType="PKCS12"
+            truststoreFile="conf/trust.jks" truststoreType="JKS" truststorePass="Changeme_123" 
+            sslProtocol="TLS"
+            ciphers="TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA" connectionTimeout="20000"/>
+
+        <Engine defaultHost="localhost" name="Catalina">
+            <Realm className="org.apache.catalina.realm.LockOutRealm">
+                <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
+            </Realm>
+
+            <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
+                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
+                    pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt" />
+                <Context docBase="ROOT" path="" reloadable="true" />
+            </Host>
+        </Engine>
+    </Service>
+</Server>
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/trust.jks b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/trust.jks
new file mode 100644 (file)
index 0000000..30b62ce
Binary files /dev/null and b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/trust.jks differ
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/web.xml b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/conf/web.xml
new file mode 100644 (file)
index 0000000..793a8a8
--- /dev/null
@@ -0,0 +1,4689 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
+                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
+  version="3.1">
+
+  <!-- ======================== Introduction ============================== -->
+  <!-- This document defines default values for *all* web applications      -->
+  <!-- loaded into this instance of Tomcat.  As each application is         -->
+  <!-- deployed, this file is processed, followed by the                    -->
+  <!-- "/WEB-INF/web.xml" deployment descriptor from your own               -->
+  <!-- applications.                                                        -->
+  <!--                                                                      -->
+  <!-- WARNING:  Do not configure application-specific resources here!      -->
+  <!-- They should go in the "/WEB-INF/web.xml" file in your application.   -->
+
+
+  <!-- ================== Built In Servlet Definitions ==================== -->
+
+
+  <!-- The default servlet for all web applications, that serves static     -->
+  <!-- resources.  It processes all requests that are not mapped to other   -->
+  <!-- servlets with servlet mappings (defined either here or in your own   -->
+  <!-- web.xml file).  This servlet supports the following initialization   -->
+  <!-- parameters (default values are in square brackets):                  -->
+  <!--                                                                      -->
+  <!--   debug               Debugging detail level for messages logged     -->
+  <!--                       by this servlet. Useful values are 0, 1, and   -->
+  <!--                       11 where higher values mean more detail. [0]   -->
+  <!--                                                                      -->
+  <!--   fileEncoding        Encoding to be used to read static resources   -->
+  <!--                       [platform default]                             -->
+  <!--                                                                      -->
+  <!--   input               Input buffer size (in bytes) when reading      -->
+  <!--                       resources to be served.  [2048]                -->
+  <!--                                                                      -->
+  <!--   listings            Should directory listings be produced if there -->
+  <!--                       is no welcome file in this directory?  [false] -->
+  <!--                       WARNING: Listings for directories with many    -->
+  <!--                       entries can be slow and may consume            -->
+  <!--                       significant proportions of server resources.   -->
+  <!--                                                                      -->
+  <!--   output              Output buffer size (in bytes) when writing     -->
+  <!--                       resources to be served.  [2048]                -->
+  <!--                                                                      -->
+  <!--   readonly            Is this context "read only", so HTTP           -->
+  <!--                       commands like PUT and DELETE are               -->
+  <!--                       rejected?  [true]                              -->
+  <!--                                                                      -->
+  <!--   readmeFile          File to display together with the directory    -->
+  <!--                       contents. [null]                               -->
+  <!--                                                                      -->
+  <!--   sendfileSize        If the connector used supports sendfile, this  -->
+  <!--                       represents the minimal file size in KB for     -->
+  <!--                       which sendfile will be used. Use a negative    -->
+  <!--                       value to always disable sendfile.  [48]        -->
+  <!--                                                                      -->
+  <!--   useAcceptRanges     Should the Accept-Ranges header be included    -->
+  <!--                       in responses where appropriate? [true]         -->
+  <!--                                                                      -->
+  <!--  For directory listing customization. Checks localXsltFile, then     -->
+  <!--  globalXsltFile, then defaults to original behavior.                 -->
+  <!--                                                                      -->
+  <!--   localXsltFile       Make directory listings an XML doc and         -->
+  <!--                       pass the result to this style sheet residing   -->
+  <!--                       in that directory. This overrides              -->
+  <!--                       contextXsltFile and globalXsltFile[null]       -->
+  <!--                                                                      -->
+  <!--   contextXsltFile     Make directory listings an XML doc and         -->
+  <!--                       pass the result to this style sheet which is   -->
+  <!--                       relative to the context root. This overrides   -->
+  <!--                       globalXsltFile[null]                           -->
+  <!--                                                                      -->
+  <!--   globalXsltFile      Site wide configuration version of             -->
+  <!--                       localXsltFile. This argument must either be an -->
+  <!--                       absolute or relative (to either                -->
+  <!--                       $CATALINA_BASE/conf or $CATALINA_HOME/conf)    -->
+  <!--                       path that points to a location below either    -->
+  <!--                       $CATALINA_BASE/conf (checked first) or         -->
+  <!--                       $CATALINA_HOME/conf (checked second).[null]    -->
+  <!--                                                                      -->
+  <!--   showServerInfo      Should server information be presented in the  -->
+  <!--                       response sent to clients when directory        -->
+  <!--                       listings is enabled? [true]                    -->
+
+    <servlet>
+        <servlet-name>default</servlet-name>
+        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
+        <init-param>
+            <param-name>debug</param-name>
+            <param-value>0</param-value>
+        </init-param>
+        <init-param>
+            <param-name>listings</param-name>
+            <param-value>false</param-value>
+        </init-param>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+
+
+  <!-- The JSP page compiler and execution servlet, which is the mechanism  -->
+  <!-- used by Tomcat to support JSP pages.  Traditionally, this servlet    -->
+  <!-- is mapped to the URL pattern "*.jsp".  This servlet supports the     -->
+  <!-- following initialization parameters (default values are in square    -->
+  <!-- brackets):                                                           -->
+  <!--                                                                      -->
+  <!--   checkInterval       If development is false and checkInterval is   -->
+  <!--                       greater than zero, background compilations are -->
+  <!--                       enabled. checkInterval is the time in seconds  -->
+  <!--                       between checks to see if a JSP page (and its   -->
+  <!--                       dependent files) needs to  be recompiled. [0]  -->
+  <!--                                                                      -->
+  <!--   classdebuginfo      Should the class file be compiled with         -->
+  <!--                       debugging information?  [true]                 -->
+  <!--                                                                      -->
+  <!--   classpath           What class path should I use while compiling   -->
+  <!--                       generated servlets?  [Created dynamically      -->
+  <!--                       based on the current web application]          -->
+  <!--                                                                      -->
+  <!--   compiler            Which compiler Ant should use to compile JSP   -->
+  <!--                       pages.  See the jasper documentation for more  -->
+  <!--                       information.                                   -->
+  <!--                                                                      -->
+  <!--   compilerSourceVM    Compiler source VM. [1.7]                      -->
+  <!--                                                                      -->
+  <!--   compilerTargetVM    Compiler target VM. [1.7]                      -->
+  <!--                                                                      -->
+  <!--   development         Is Jasper used in development mode? If true,   -->
+  <!--                       the frequency at which JSPs are checked for    -->
+  <!--                       modification may be specified via the          -->
+  <!--                       modificationTestInterval parameter. [true]     -->
+  <!--                                                                      -->
+  <!--   displaySourceFragment                                              -->
+  <!--                       Should a source fragment be included in        -->
+  <!--                       exception messages? [true]                     -->
+  <!--                                                                      -->
+  <!--   dumpSmap            Should the SMAP info for JSR45 debugging be    -->
+  <!--                       dumped to a file? [false]                      -->
+  <!--                       False if suppressSmap is true                  -->
+  <!--                                                                      -->
+  <!--   enablePooling       Determines whether tag handler pooling is      -->
+  <!--                       enabled. This is a compilation option. It will -->
+  <!--                       not alter the behaviour of JSPs that have      -->
+  <!--                       already been compiled. [true]                  -->
+  <!--                                                                      -->
+  <!--   engineOptionsClass  Allows specifying the Options class used to    -->
+  <!--                       configure Jasper. If not present, the default  -->
+  <!--                       EmbeddedServletOptions will be used.           -->
+  <!--                                                                      -->
+  <!--   errorOnUseBeanInvalidClassAttribute                                -->
+  <!--                       Should Jasper issue an error when the value of -->
+  <!--                       the class attribute in an useBean action is    -->
+  <!--                       not a valid bean class?  [true]                -->
+  <!--                                                                      -->
+  <!--   fork                Tell Ant to fork compiles of JSP pages so that -->
+  <!--                       a separate JVM is used for JSP page compiles   -->
+  <!--                       from the one Tomcat is running in. [true]      -->
+  <!--                                                                      -->
+  <!--   genStringAsCharArray                                               -->
+  <!--                       Should text strings be generated as char       -->
+  <!--                       arrays, to improve performance in some cases?  -->
+  <!--                       [false]                                        -->
+  <!--                                                                      -->
+  <!--   ieClassId           The class-id value to be sent to Internet      -->
+  <!--                       Explorer when using <jsp:plugin> tags.         -->
+  <!--                       [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93]   -->
+  <!--                                                                      -->
+  <!--   javaEncoding        Java file encoding to use for generating java  -->
+  <!--                       source files. [UTF8]                           -->
+  <!--                                                                      -->
+  <!--   keepgenerated       Should we keep the generated Java source code  -->
+  <!--                       for each page instead of deleting it? [true]   -->
+  <!--                                                                      -->
+  <!--   mappedfile          Should we generate static content with one     -->
+  <!--                       print statement per input line, to ease        -->
+  <!--                       debugging?  [true]                             -->
+  <!--                                                                      -->
+  <!--   maxLoadedJsps       The maximum number of JSPs that will be loaded -->
+  <!--                       for a web application. If more than this       -->
+  <!--                       number of JSPs are loaded, the least recently  -->
+  <!--                       used JSPs will be unloaded so that the number  -->
+  <!--                       of JSPs loaded at any one time does not exceed -->
+  <!--                       this limit. A value of zero or less indicates  -->
+  <!--                       no limit. [-1]                                 -->
+  <!--                                                                      -->
+  <!--   jspIdleTimeout      The amount of time in seconds a JSP can be     -->
+  <!--                       idle before it is unloaded. A value of zero    -->
+  <!--                       or less indicates never unload. [-1]           -->
+  <!--                                                                      -->
+  <!--   modificationTestInterval                                           -->
+  <!--                       Causes a JSP (and its dependent files) to not  -->
+  <!--                       be checked for modification during the         -->
+  <!--                       specified time interval (in seconds) from the  -->
+  <!--                       last time the JSP was checked for              -->
+  <!--                       modification. A value of 0 will cause the JSP  -->
+  <!--                       to be checked on every access.                 -->
+  <!--                       Used in development mode only. [4]             -->
+  <!--                                                                      -->
+  <!--   recompileOnFail     If a JSP compilation fails should the          -->
+  <!--                       modificationTestInterval be ignored and the    -->
+  <!--                       next access trigger a re-compilation attempt?  -->
+  <!--                       Used in development mode only and is disabled  -->
+  <!--                       by default as compilation may be expensive and -->
+  <!--                       could lead to excessive resource usage.        -->
+  <!--                       [false]                                        -->
+  <!--                                                                      -->
+  <!--   scratchdir          What scratch directory should we use when      -->
+  <!--                       compiling JSP pages?  [default work directory  -->
+  <!--                       for the current web application]               -->
+  <!--                                                                      -->
+  <!--   suppressSmap        Should the generation of SMAP info for JSR45   -->
+  <!--                       debugging be suppressed?  [false]              -->
+  <!--                                                                      -->
+  <!--   trimSpaces          Should white spaces in template text between   -->
+  <!--                       actions or directives be trimmed?  [false]     -->
+  <!--                                                                      -->
+  <!--   xpoweredBy          Determines whether X-Powered-By response       -->
+  <!--                       header is added by generated servlet.  [false] -->
+  <!--                                                                      -->
+  <!--   strictQuoteEscaping When scriptlet expressions are used for        -->
+  <!--                       attribute values, should the rules in JSP.1.6  -->
+  <!--                       for the escaping of quote characters be        -->
+  <!--                       strictly applied? [true]                       -->
+  <!--                                                                      -->
+  <!--   quoteAttributeEL    When EL is used in an attribute value on a     -->
+  <!--                       JSP page should the rules for quoting of       -->
+  <!--                       attributes described in JSP.1.6 be applied to  -->
+  <!--                       the expression? [true]                         -->
+
+    <servlet>
+        <servlet-name>jsp</servlet-name>
+        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
+        <init-param>
+            <param-name>fork</param-name>
+            <param-value>false</param-value>
+        </init-param>
+        <init-param>
+            <param-name>xpoweredBy</param-name>
+            <param-value>false</param-value>
+        </init-param>
+        <load-on-startup>3</load-on-startup>
+    </servlet>
+
+
+  <!-- NOTE: An SSI Filter is also available as an alternative SSI          -->
+  <!-- implementation. Use either the Servlet or the Filter but NOT both.   -->
+  <!--                                                                      -->
+  <!-- Server Side Includes processing servlet, which processes SSI         -->
+  <!-- directives in HTML pages consistent with similar support in web      -->
+  <!-- servers like Apache.  Traditionally, this servlet is mapped to the   -->
+  <!-- URL pattern "*.shtml".  This servlet supports the following          -->
+  <!-- initialization parameters (default values are in square brackets):   -->
+  <!--                                                                      -->
+  <!--   buffered            Should output from this servlet be buffered?   -->
+  <!--                       (0=false, 1=true)  [0]                         -->
+  <!--                                                                      -->
+  <!--   debug               Debugging detail level for messages logged     -->
+  <!--                       by this servlet.  [0]                          -->
+  <!--                                                                      -->
+  <!--   expires             The number of seconds before a page with SSI   -->
+  <!--                       directives will expire.  [No default]          -->
+  <!--                                                                      -->
+  <!--   isVirtualWebappRelative                                            -->
+  <!--                       Should "virtual" paths be interpreted as       -->
+  <!--                       relative to the context root, instead of       -->
+  <!--                       the server root? [false]                       -->
+  <!--                                                                      -->
+  <!--   inputEncoding       The encoding to assume for SSI resources if    -->
+  <!--                       one is not available from the resource.        -->
+  <!--                       [Platform default]                             -->
+  <!--                                                                      -->
+  <!--   outputEncoding      The encoding to use for the page that results  -->
+  <!--                       from the SSI processing. [UTF-8]               -->
+  <!--                                                                      -->
+  <!--   allowExec           Is use of the exec command enabled? [false]    -->
+
+<!--
+    <servlet>
+        <servlet-name>ssi</servlet-name>
+        <servlet-class>
+          org.apache.catalina.ssi.SSIServlet
+        </servlet-class>
+        <init-param>
+          <param-name>buffered</param-name>
+          <param-value>1</param-value>
+        </init-param>
+        <init-param>
+          <param-name>debug</param-name>
+          <param-value>0</param-value>
+        </init-param>
+        <init-param>
+          <param-name>expires</param-name>
+          <param-value>666</param-value>
+        </init-param>
+        <init-param>
+          <param-name>isVirtualWebappRelative</param-name>
+          <param-value>false</param-value>
+        </init-param>
+        <load-on-startup>4</load-on-startup>
+    </servlet>
+-->
+
+
+  <!-- Common Gateway Includes (CGI) processing servlet, which supports     -->
+  <!-- execution of external applications that conform to the CGI spec      -->
+  <!-- requirements.  Typically, this servlet is mapped to the URL pattern  -->
+  <!-- "/cgi-bin/*", which means that any CGI applications that are         -->
+  <!-- executed must be present within the web application.  This servlet   -->
+  <!-- supports the following initialization parameters (default values     -->
+  <!-- are in square brackets):                                             -->
+  <!--                                                                      -->
+  <!--   cgiPathPrefix        The CGI search path will start at             -->
+  <!--                        webAppRootDir + File.separator + this prefix. -->
+  <!--                        If not set, then webAppRootDir is used.       -->
+  <!--                        Recommended value: WEB-INF/cgi                -->
+  <!--                                                                      -->
+  <!--   debug                Debugging detail level for messages logged    -->
+  <!--                        by this servlet. Useful values range from 0   -->
+  <!--                        to 5 where 0 means no logging and 5 means     -->
+  <!--                        maximum logging. Values of 10 or more mean    -->
+  <!--                        maximum logging plus debug info added to the  -->
+  <!--                        HTTP response. If an error occurs and debug   -->
+  <!--                        is 10 or more the standard error page         -->
+  <!--                        mechanism will be disabled and a response     -->
+  <!--                        body with debug information will be produced. -->
+  <!--                        Note that any value of 10 or more has the     -->
+  <!--                        same effect as a value of 10. If set to 10 or -->
+  <!--                        more the standard error page mechanism will   -->
+  <!--                        be disabled and a debug page shown instead.   -->
+  <!--                        The debug page is not considered secure and   -->
+  <!--                        should not be enabled for production systems. -->
+  <!--                        [0]                                           -->
+  <!--                                                                      -->
+  <!--   executable           Name of the executable used to run the        -->
+  <!--                        script. [perl]                                -->
+  <!--                                                                      -->
+  <!--   parameterEncoding    Name of parameter encoding to be used with    -->
+  <!--                        CGI servlet.                                  -->
+  <!--                        [System.getProperty("file.encoding","UTF-8")] -->
+  <!--                                                                      -->
+  <!--   passShellEnvironment Should the shell environment variables (if    -->
+  <!--                        any) be passed to the CGI script? [false]     -->
+  <!--                                                                      -->
+  <!--   stderrTimeout        The time (in milliseconds) to wait for the    -->
+  <!--                        reading of stderr to complete before          -->
+  <!--                        terminating the CGI process. [2000]           -->
+
+<!--
+    <servlet>
+        <servlet-name>cgi</servlet-name>
+        <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
+        <init-param>
+          <param-name>debug</param-name>
+          <param-value>0</param-value>
+        </init-param>
+        <init-param>
+          <param-name>cgiPathPrefix</param-name>
+          <param-value>WEB-INF/cgi</param-value>
+        </init-param>
+         <load-on-startup>5</load-on-startup>
+    </servlet>
+-->
+
+
+  <!-- ================ Built In Servlet Mappings ========================= -->
+
+
+  <!-- The servlet mappings for the built in servlets defined above.  Note  -->
+  <!-- that, by default, the CGI and SSI servlets are *not* mapped.  You    -->
+  <!-- must uncomment these mappings (or add them to your application's own -->
+  <!-- web.xml deployment descriptor) to enable these services              -->
+
+    <!-- The mapping for the default servlet -->
+    <servlet-mapping>
+        <servlet-name>default</servlet-name>
+        <url-pattern>/</url-pattern>
+    </servlet-mapping>
+
+    <!-- The mappings for the JSP servlet -->
+    <servlet-mapping>
+        <servlet-name>jsp</servlet-name>
+        <url-pattern>*.jsp</url-pattern>
+        <url-pattern>*.jspx</url-pattern>
+    </servlet-mapping>
+
+    <!-- The mapping for the SSI servlet -->
+<!--
+    <servlet-mapping>
+        <servlet-name>ssi</servlet-name>
+        <url-pattern>*.shtml</url-pattern>
+    </servlet-mapping>
+-->
+
+    <!-- The mapping for the CGI Gateway servlet -->
+
+<!--
+    <servlet-mapping>
+        <servlet-name>cgi</servlet-name>
+        <url-pattern>/cgi-bin/*</url-pattern>
+    </servlet-mapping>
+-->
+
+
+  <!-- ================== Built In Filter Definitions ===================== -->
+
+  <!-- A filter that sets various security related HTTP Response headers.   -->
+  <!-- This filter supports the following initialization parameters         -->
+  <!-- (default values are in square brackets):                             -->
+  <!--                                                                      -->
+  <!--   hstsEnabled         Should the HTTP Strict Transport Security      -->
+  <!--                       (HSTS) header be added to the response? See    -->
+  <!--                       RFC 6797 for more information on HSTS. [true]  -->
+  <!--                                                                      -->
+  <!--   hstsMaxAgeSeconds   The max age value that should be used in the   -->
+  <!--                       HSTS header. Negative values will be treated   -->
+  <!--                       as zero. [0]                                   -->
+  <!--                                                                      -->
+  <!--   hstsIncludeSubDomains                                              -->
+  <!--                       Should the includeSubDomains parameter be      -->
+  <!--                       included in the HSTS header.                   -->
+  <!--                                                                      -->
+  <!--   antiClickJackingEnabled                                            -->
+  <!--                       Should the anti click-jacking header           -->
+  <!--                       X-Frame-Options be added to every response?    -->
+  <!--                       [true]                                         -->
+  <!--                                                                      -->
+  <!--   antiClickJackingOption                                             -->
+  <!--                       What value should be used for the header. Must -->
+  <!--                       be one of DENY, SAMEORIGIN, ALLOW-FROM         -->
+  <!--                       (case-insensitive). [DENY]                     -->
+  <!--                                                                      -->
+  <!--   antiClickJackingUri IF ALLOW-FROM is used, what URI should be      -->
+  <!--                       allowed? []                                    -->
+  <!--                                                                      -->
+  <!--   blockContentTypeSniffingEnabled                                    -->
+  <!--                       Should the header that blocks content type     -->
+  <!--                       sniffing be added to every response? [true]    -->
+<!--
+    <filter>
+        <filter-name>httpHeaderSecurity</filter-name>
+        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
+        <async-supported>true</async-supported>
+    </filter>
+-->
+
+  <!-- A filter that sets character encoding that is used to decode -->
+  <!-- parameters in a POST request -->
+<!--
+    <filter>
+        <filter-name>setCharacterEncodingFilter</filter-name>
+        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
+        <init-param>
+            <param-name>encoding</param-name>
+            <param-value>UTF-8</param-value>
+        </init-param>
+        <async-supported>true</async-supported>
+    </filter>
+-->
+
+  <!-- A filter that triggers request parameters parsing and rejects the    -->
+  <!-- request if some parameters were skipped because of parsing errors or -->
+  <!-- request size limitations.                                            -->
+<!--
+    <filter>
+        <filter-name>failedRequestFilter</filter-name>
+        <filter-class>
+          org.apache.catalina.filters.FailedRequestFilter
+        </filter-class>
+        <async-supported>true</async-supported>
+    </filter>
+-->
+
+
+  <!-- NOTE: An SSI Servlet is also available as an alternative SSI         -->
+  <!-- implementation. Use either the Servlet or the Filter but NOT both.   -->
+  <!--                                                                      -->
+  <!-- Server Side Includes processing filter, which processes SSI          -->
+  <!-- directives in HTML pages consistent with similar support in web      -->
+  <!-- servers like Apache.  Traditionally, this filter is mapped to the    -->
+  <!-- URL pattern "*.shtml", though it can be mapped to "*" as it will     -->
+  <!-- selectively enable/disable SSI processing based on mime types. For   -->
+  <!-- this to work you will need to uncomment the .shtml mime type         -->
+  <!-- definition towards the bottom of this file.                          -->
+  <!-- The contentType init param allows you to apply SSI processing to JSP -->
+  <!-- pages, javascript, or any other content you wish.  This filter       -->
+  <!-- supports the following initialization parameters (default values are -->
+  <!-- in square brackets):                                                 -->
+  <!--                                                                      -->
+  <!--   contentType         A regex pattern that must be matched before    -->
+  <!--                       SSI processing is applied.                     -->
+  <!--                       [text/x-server-parsed-html(;.*)?]              -->
+  <!--                                                                      -->
+  <!--   debug               Debugging detail level for messages logged     -->
+  <!--                       by this servlet.  [0]                          -->
+  <!--                                                                      -->
+  <!--   expires             The number of seconds before a page with SSI   -->
+  <!--                       directives will expire.  [No default]          -->
+  <!--                                                                      -->
+  <!--   isVirtualWebappRelative                                            -->
+  <!--                       Should "virtual" paths be interpreted as       -->
+  <!--                       relative to the context root, instead of       -->
+  <!--                       the server root? [false]                       -->
+  <!--                                                                      -->
+  <!--   allowExec           Is use of the exec command enabled? [false]    -->
+
+<!--
+    <filter>
+        <filter-name>ssi</filter-name>
+        <filter-class>
+          org.apache.catalina.ssi.SSIFilter
+        </filter-class>
+        <init-param>
+          <param-name>contentType</param-name>
+          <param-value>text/x-server-parsed-html(;.*)?</param-value>
+        </init-param>
+        <init-param>
+          <param-name>debug</param-name>
+          <param-value>0</param-value>
+        </init-param>
+        <init-param>
+          <param-name>expires</param-name>
+          <param-value>666</param-value>
+        </init-param>
+        <init-param>
+          <param-name>isVirtualWebappRelative</param-name>
+          <param-value>false</param-value>
+        </init-param>
+    </filter>
+-->
+
+
+  <!-- ==================== Built In Filter Mappings ====================== -->
+
+  <!-- The mapping for the HTTP header security Filter -->
+<!--
+    <filter-mapping>
+        <filter-name>httpHeaderSecurity</filter-name>
+        <url-pattern>/*</url-pattern>
+        <dispatcher>REQUEST</dispatcher>
+    </filter-mapping>
+-->
+
+  <!-- The mapping for the Set Character Encoding Filter -->
+<!--
+    <filter-mapping>
+        <filter-name>setCharacterEncodingFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+-->
+
+  <!-- The mapping for the Failed Request Filter -->
+<!--
+    <filter-mapping>
+        <filter-name>failedRequestFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+-->
+
+  <!-- The mapping for the SSI Filter -->
+<!--
+    <filter-mapping>
+        <filter-name>ssi</filter-name>
+        <url-pattern>*.shtml</url-pattern>
+    </filter-mapping>
+-->
+
+
+  <!-- ==================== Default Session Configuration ================= -->
+  <!-- You can set the default session timeout (in minutes) for all newly   -->
+  <!-- created sessions by modifying the value below.                       -->
+
+    <session-config>
+        <session-timeout>30</session-timeout>
+    </session-config>
+
+
+  <!-- ===================== Default MIME Type Mappings =================== -->
+  <!-- When serving static resources, Tomcat will automatically generate    -->
+  <!-- a "Content-Type" header based on the resource's filename extension,  -->
+  <!-- based on these mappings.  Additional mappings can be added here (to  -->
+  <!-- apply to all web applications), or in your own application's web.xml -->
+  <!-- deployment descriptor.                                               -->
+  <!-- Note: Extensions are always matched in a case-insensitive manner.    -->
+
+    <mime-mapping>
+        <extension>123</extension>
+        <mime-type>application/vnd.lotus-1-2-3</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>3dml</extension>
+        <mime-type>text/vnd.in3d.3dml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>3ds</extension>
+        <mime-type>image/x-3ds</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>3g2</extension>
+        <mime-type>video/3gpp2</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>3gp</extension>
+        <mime-type>video/3gpp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>7z</extension>
+        <mime-type>application/x-7z-compressed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>aab</extension>
+        <mime-type>application/x-authorware-bin</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>aac</extension>
+        <mime-type>audio/x-aac</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>aam</extension>
+        <mime-type>application/x-authorware-map</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>aas</extension>
+        <mime-type>application/x-authorware-seg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>abs</extension>
+        <mime-type>audio/x-mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>abw</extension>
+        <mime-type>application/x-abiword</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ac</extension>
+        <mime-type>application/pkix-attr-cert</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>acc</extension>
+        <mime-type>application/vnd.americandynamics.acc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ace</extension>
+        <mime-type>application/x-ace-compressed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>acu</extension>
+        <mime-type>application/vnd.acucobol</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>acutc</extension>
+        <mime-type>application/vnd.acucorp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>adp</extension>
+        <mime-type>audio/adpcm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>aep</extension>
+        <mime-type>application/vnd.audiograph</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>afm</extension>
+        <mime-type>application/x-font-type1</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>afp</extension>
+        <mime-type>application/vnd.ibm.modcap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ahead</extension>
+        <mime-type>application/vnd.ahead.space</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ai</extension>
+        <mime-type>application/postscript</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>aif</extension>
+        <mime-type>audio/x-aiff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>aifc</extension>
+        <mime-type>audio/x-aiff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>aiff</extension>
+        <mime-type>audio/x-aiff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>aim</extension>
+        <mime-type>application/x-aim</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>air</extension>
+        <mime-type>application/vnd.adobe.air-application-installer-package+zip</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ait</extension>
+        <mime-type>application/vnd.dvb.ait</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ami</extension>
+        <mime-type>application/vnd.amiga.ami</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>anx</extension>
+        <mime-type>application/annodex</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>apk</extension>
+        <mime-type>application/vnd.android.package-archive</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>appcache</extension>
+        <mime-type>text/cache-manifest</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>application</extension>
+        <mime-type>application/x-ms-application</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>apr</extension>
+        <mime-type>application/vnd.lotus-approach</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>arc</extension>
+        <mime-type>application/x-freearc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>art</extension>
+        <mime-type>image/x-jg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>asc</extension>
+        <mime-type>application/pgp-signature</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>asf</extension>
+        <mime-type>video/x-ms-asf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>asm</extension>
+        <mime-type>text/x-asm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>aso</extension>
+        <mime-type>application/vnd.accpac.simply.aso</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>asx</extension>
+        <mime-type>video/x-ms-asf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>atc</extension>
+        <mime-type>application/vnd.acucorp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>atom</extension>
+        <mime-type>application/atom+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>atomcat</extension>
+        <mime-type>application/atomcat+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>atomsvc</extension>
+        <mime-type>application/atomsvc+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>atx</extension>
+        <mime-type>application/vnd.antix.game-component</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>au</extension>
+        <mime-type>audio/basic</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>avi</extension>
+        <mime-type>video/x-msvideo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>avx</extension>
+        <mime-type>video/x-rad-screenplay</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>aw</extension>
+        <mime-type>application/applixware</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>axa</extension>
+        <mime-type>audio/annodex</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>axv</extension>
+        <mime-type>video/annodex</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>azf</extension>
+        <mime-type>application/vnd.airzip.filesecure.azf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>azs</extension>
+        <mime-type>application/vnd.airzip.filesecure.azs</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>azw</extension>
+        <mime-type>application/vnd.amazon.ebook</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bat</extension>
+        <mime-type>application/x-msdownload</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bcpio</extension>
+        <mime-type>application/x-bcpio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bdf</extension>
+        <mime-type>application/x-font-bdf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bdm</extension>
+        <mime-type>application/vnd.syncml.dm+wbxml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bed</extension>
+        <mime-type>application/vnd.realvnc.bed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bh2</extension>
+        <mime-type>application/vnd.fujitsu.oasysprs</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bin</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>blb</extension>
+        <mime-type>application/x-blorb</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>blorb</extension>
+        <mime-type>application/x-blorb</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bmi</extension>
+        <mime-type>application/vnd.bmi</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bmp</extension>
+        <mime-type>image/bmp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>body</extension>
+        <mime-type>text/html</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>book</extension>
+        <mime-type>application/vnd.framemaker</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>box</extension>
+        <mime-type>application/vnd.previewsystems.box</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>boz</extension>
+        <mime-type>application/x-bzip2</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bpk</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>btif</extension>
+        <mime-type>image/prs.btif</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bz</extension>
+        <mime-type>application/x-bzip</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>bz2</extension>
+        <mime-type>application/x-bzip2</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>c</extension>
+        <mime-type>text/x-c</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>c11amc</extension>
+        <mime-type>application/vnd.cluetrust.cartomobile-config</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>c11amz</extension>
+        <mime-type>application/vnd.cluetrust.cartomobile-config-pkg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>c4d</extension>
+        <mime-type>application/vnd.clonk.c4group</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>c4f</extension>
+        <mime-type>application/vnd.clonk.c4group</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>c4g</extension>
+        <mime-type>application/vnd.clonk.c4group</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>c4p</extension>
+        <mime-type>application/vnd.clonk.c4group</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>c4u</extension>
+        <mime-type>application/vnd.clonk.c4group</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cab</extension>
+        <mime-type>application/vnd.ms-cab-compressed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>caf</extension>
+        <mime-type>audio/x-caf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cap</extension>
+        <mime-type>application/vnd.tcpdump.pcap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>car</extension>
+        <mime-type>application/vnd.curl.car</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cat</extension>
+        <mime-type>application/vnd.ms-pki.seccat</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cb7</extension>
+        <mime-type>application/x-cbr</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cba</extension>
+        <mime-type>application/x-cbr</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cbr</extension>
+        <mime-type>application/x-cbr</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cbt</extension>
+        <mime-type>application/x-cbr</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cbz</extension>
+        <mime-type>application/x-cbr</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cc</extension>
+        <mime-type>text/x-c</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cct</extension>
+        <mime-type>application/x-director</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ccxml</extension>
+        <mime-type>application/ccxml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cdbcmsg</extension>
+        <mime-type>application/vnd.contact.cmsg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cdf</extension>
+        <mime-type>application/x-cdf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cdkey</extension>
+        <mime-type>application/vnd.mediastation.cdkey</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cdmia</extension>
+        <mime-type>application/cdmi-capability</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cdmic</extension>
+        <mime-type>application/cdmi-container</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cdmid</extension>
+        <mime-type>application/cdmi-domain</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cdmio</extension>
+        <mime-type>application/cdmi-object</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cdmiq</extension>
+        <mime-type>application/cdmi-queue</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cdx</extension>
+        <mime-type>chemical/x-cdx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cdxml</extension>
+        <mime-type>application/vnd.chemdraw+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cdy</extension>
+        <mime-type>application/vnd.cinderella</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cer</extension>
+        <mime-type>application/pkix-cert</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cfs</extension>
+        <mime-type>application/x-cfs-compressed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cgm</extension>
+        <mime-type>image/cgm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>chat</extension>
+        <mime-type>application/x-chat</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>chm</extension>
+        <mime-type>application/vnd.ms-htmlhelp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>chrt</extension>
+        <mime-type>application/vnd.kde.kchart</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cif</extension>
+        <mime-type>chemical/x-cif</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cii</extension>
+        <mime-type>application/vnd.anser-web-certificate-issue-initiation</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cil</extension>
+        <mime-type>application/vnd.ms-artgalry</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cla</extension>
+        <mime-type>application/vnd.claymore</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>class</extension>
+        <mime-type>application/java</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>clkk</extension>
+        <mime-type>application/vnd.crick.clicker.keyboard</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>clkp</extension>
+        <mime-type>application/vnd.crick.clicker.palette</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>clkt</extension>
+        <mime-type>application/vnd.crick.clicker.template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>clkw</extension>
+        <mime-type>application/vnd.crick.clicker.wordbank</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>clkx</extension>
+        <mime-type>application/vnd.crick.clicker</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>clp</extension>
+        <mime-type>application/x-msclip</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cmc</extension>
+        <mime-type>application/vnd.cosmocaller</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cmdf</extension>
+        <mime-type>chemical/x-cmdf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cml</extension>
+        <mime-type>chemical/x-cml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cmp</extension>
+        <mime-type>application/vnd.yellowriver-custom-menu</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cmx</extension>
+        <mime-type>image/x-cmx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cod</extension>
+        <mime-type>application/vnd.rim.cod</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>com</extension>
+        <mime-type>application/x-msdownload</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>conf</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cpio</extension>
+        <mime-type>application/x-cpio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cpp</extension>
+        <mime-type>text/x-c</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cpt</extension>
+        <mime-type>application/mac-compactpro</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>crd</extension>
+        <mime-type>application/x-mscardfile</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>crl</extension>
+        <mime-type>application/pkix-crl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>crt</extension>
+        <mime-type>application/x-x509-ca-cert</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cryptonote</extension>
+        <mime-type>application/vnd.rig.cryptonote</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>csh</extension>
+        <mime-type>application/x-csh</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>csml</extension>
+        <mime-type>chemical/x-csml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>csp</extension>
+        <mime-type>application/vnd.commonspace</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>css</extension>
+        <mime-type>text/css</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cst</extension>
+        <mime-type>application/x-director</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>csv</extension>
+        <mime-type>text/csv</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cu</extension>
+        <mime-type>application/cu-seeme</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>curl</extension>
+        <mime-type>text/vnd.curl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cww</extension>
+        <mime-type>application/prs.cww</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cxt</extension>
+        <mime-type>application/x-director</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>cxx</extension>
+        <mime-type>text/x-c</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dae</extension>
+        <mime-type>model/vnd.collada+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>daf</extension>
+        <mime-type>application/vnd.mobius.daf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dart</extension>
+        <mime-type>application/vnd.dart</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dataless</extension>
+        <mime-type>application/vnd.fdsn.seed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>davmount</extension>
+        <mime-type>application/davmount+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dbk</extension>
+        <mime-type>application/docbook+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dcr</extension>
+        <mime-type>application/x-director</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dcurl</extension>
+        <mime-type>text/vnd.curl.dcurl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dd2</extension>
+        <mime-type>application/vnd.oma.dd2+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ddd</extension>
+        <mime-type>application/vnd.fujixerox.ddd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>deb</extension>
+        <mime-type>application/x-debian-package</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>def</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>deploy</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>der</extension>
+        <mime-type>application/x-x509-ca-cert</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dfac</extension>
+        <mime-type>application/vnd.dreamfactory</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dgc</extension>
+        <mime-type>application/x-dgc-compressed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dib</extension>
+        <mime-type>image/bmp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dic</extension>
+        <mime-type>text/x-c</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dir</extension>
+        <mime-type>application/x-director</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dis</extension>
+        <mime-type>application/vnd.mobius.dis</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dist</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>distz</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>djv</extension>
+        <mime-type>image/vnd.djvu</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>djvu</extension>
+        <mime-type>image/vnd.djvu</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dll</extension>
+        <mime-type>application/x-msdownload</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dmg</extension>
+        <mime-type>application/x-apple-diskimage</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dmp</extension>
+        <mime-type>application/vnd.tcpdump.pcap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dms</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dna</extension>
+        <mime-type>application/vnd.dna</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>doc</extension>
+        <mime-type>application/msword</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>docm</extension>
+        <mime-type>application/vnd.ms-word.document.macroenabled.12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>docx</extension>
+        <mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.document</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dot</extension>
+        <mime-type>application/msword</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dotm</extension>
+        <mime-type>application/vnd.ms-word.template.macroenabled.12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dotx</extension>
+        <mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dp</extension>
+        <mime-type>application/vnd.osgi.dp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dpg</extension>
+        <mime-type>application/vnd.dpgraph</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dra</extension>
+        <mime-type>audio/vnd.dra</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dsc</extension>
+        <mime-type>text/prs.lines.tag</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dssc</extension>
+        <mime-type>application/dssc+der</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dtb</extension>
+        <mime-type>application/x-dtbook+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dtd</extension>
+        <mime-type>application/xml-dtd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dts</extension>
+        <mime-type>audio/vnd.dts</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dtshd</extension>
+        <mime-type>audio/vnd.dts.hd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dump</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dv</extension>
+        <mime-type>video/x-dv</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dvb</extension>
+        <mime-type>video/vnd.dvb.file</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dvi</extension>
+        <mime-type>application/x-dvi</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dwf</extension>
+        <mime-type>model/vnd.dwf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dwg</extension>
+        <mime-type>image/vnd.dwg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dxf</extension>
+        <mime-type>image/vnd.dxf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dxp</extension>
+        <mime-type>application/vnd.spotfire.dxp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>dxr</extension>
+        <mime-type>application/x-director</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ecelp4800</extension>
+        <mime-type>audio/vnd.nuera.ecelp4800</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ecelp7470</extension>
+        <mime-type>audio/vnd.nuera.ecelp7470</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ecelp9600</extension>
+        <mime-type>audio/vnd.nuera.ecelp9600</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ecma</extension>
+        <mime-type>application/ecmascript</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>edm</extension>
+        <mime-type>application/vnd.novadigm.edm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>edx</extension>
+        <mime-type>application/vnd.novadigm.edx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>efif</extension>
+        <mime-type>application/vnd.picsel</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ei6</extension>
+        <mime-type>application/vnd.pg.osasli</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>elc</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>emf</extension>
+        <mime-type>application/x-msmetafile</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>eml</extension>
+        <mime-type>message/rfc822</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>emma</extension>
+        <mime-type>application/emma+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>emz</extension>
+        <mime-type>application/x-msmetafile</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>eol</extension>
+        <mime-type>audio/vnd.digital-winds</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>eot</extension>
+        <mime-type>application/vnd.ms-fontobject</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>eps</extension>
+        <mime-type>application/postscript</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>epub</extension>
+        <mime-type>application/epub+zip</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>es3</extension>
+        <mime-type>application/vnd.eszigno3+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>esa</extension>
+        <mime-type>application/vnd.osgi.subsystem</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>esf</extension>
+        <mime-type>application/vnd.epson.esf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>et3</extension>
+        <mime-type>application/vnd.eszigno3+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>etx</extension>
+        <mime-type>text/x-setext</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>eva</extension>
+        <mime-type>application/x-eva</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>evy</extension>
+        <mime-type>application/x-envoy</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>exe</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>exi</extension>
+        <mime-type>application/exi</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ext</extension>
+        <mime-type>application/vnd.novadigm.ext</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ez</extension>
+        <mime-type>application/andrew-inset</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ez2</extension>
+        <mime-type>application/vnd.ezpix-album</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ez3</extension>
+        <mime-type>application/vnd.ezpix-package</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>f</extension>
+        <mime-type>text/x-fortran</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>f4v</extension>
+        <mime-type>video/x-f4v</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>f77</extension>
+        <mime-type>text/x-fortran</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>f90</extension>
+        <mime-type>text/x-fortran</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fbs</extension>
+        <mime-type>image/vnd.fastbidsheet</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fcdt</extension>
+        <mime-type>application/vnd.adobe.formscentral.fcdt</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fcs</extension>
+        <mime-type>application/vnd.isac.fcs</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fdf</extension>
+        <mime-type>application/vnd.fdf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fe_launch</extension>
+        <mime-type>application/vnd.denovo.fcselayout-link</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fg5</extension>
+        <mime-type>application/vnd.fujitsu.oasysgp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fgd</extension>
+        <mime-type>application/x-director</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fh</extension>
+        <mime-type>image/x-freehand</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fh4</extension>
+        <mime-type>image/x-freehand</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fh5</extension>
+        <mime-type>image/x-freehand</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fh7</extension>
+        <mime-type>image/x-freehand</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fhc</extension>
+        <mime-type>image/x-freehand</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fig</extension>
+        <mime-type>application/x-xfig</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>flac</extension>
+        <mime-type>audio/flac</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fli</extension>
+        <mime-type>video/x-fli</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>flo</extension>
+        <mime-type>application/vnd.micrografx.flo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>flv</extension>
+        <mime-type>video/x-flv</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>flw</extension>
+        <mime-type>application/vnd.kde.kivio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>flx</extension>
+        <mime-type>text/vnd.fmi.flexstor</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fly</extension>
+        <mime-type>text/vnd.fly</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fm</extension>
+        <mime-type>application/vnd.framemaker</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fnc</extension>
+        <mime-type>application/vnd.frogans.fnc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>for</extension>
+        <mime-type>text/x-fortran</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fpx</extension>
+        <mime-type>image/vnd.fpx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>frame</extension>
+        <mime-type>application/vnd.framemaker</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fsc</extension>
+        <mime-type>application/vnd.fsc.weblaunch</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fst</extension>
+        <mime-type>image/vnd.fst</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ftc</extension>
+        <mime-type>application/vnd.fluxtime.clip</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fti</extension>
+        <mime-type>application/vnd.anser-web-funds-transfer-initiation</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fvt</extension>
+        <mime-type>video/vnd.fvt</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fxp</extension>
+        <mime-type>application/vnd.adobe.fxp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fxpl</extension>
+        <mime-type>application/vnd.adobe.fxp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>fzs</extension>
+        <mime-type>application/vnd.fuzzysheet</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>g2w</extension>
+        <mime-type>application/vnd.geoplan</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>g3</extension>
+        <mime-type>image/g3fax</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>g3w</extension>
+        <mime-type>application/vnd.geospace</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gac</extension>
+        <mime-type>application/vnd.groove-account</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gam</extension>
+        <mime-type>application/x-tads</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gbr</extension>
+        <mime-type>application/rpki-ghostbusters</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gca</extension>
+        <mime-type>application/x-gca-compressed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gdl</extension>
+        <mime-type>model/vnd.gdl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>geo</extension>
+        <mime-type>application/vnd.dynageo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gex</extension>
+        <mime-type>application/vnd.geometry-explorer</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ggb</extension>
+        <mime-type>application/vnd.geogebra.file</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ggt</extension>
+        <mime-type>application/vnd.geogebra.tool</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ghf</extension>
+        <mime-type>application/vnd.groove-help</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gif</extension>
+        <mime-type>image/gif</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gim</extension>
+        <mime-type>application/vnd.groove-identity-message</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gml</extension>
+        <mime-type>application/gml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gmx</extension>
+        <mime-type>application/vnd.gmx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gnumeric</extension>
+        <mime-type>application/x-gnumeric</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gph</extension>
+        <mime-type>application/vnd.flographit</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gpx</extension>
+        <mime-type>application/gpx+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gqf</extension>
+        <mime-type>application/vnd.grafeq</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gqs</extension>
+        <mime-type>application/vnd.grafeq</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gram</extension>
+        <mime-type>application/srgs</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gramps</extension>
+        <mime-type>application/x-gramps-xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gre</extension>
+        <mime-type>application/vnd.geometry-explorer</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>grv</extension>
+        <mime-type>application/vnd.groove-injector</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>grxml</extension>
+        <mime-type>application/srgs+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gsf</extension>
+        <mime-type>application/x-font-ghostscript</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gtar</extension>
+        <mime-type>application/x-gtar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gtm</extension>
+        <mime-type>application/vnd.groove-tool-message</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gtw</extension>
+        <mime-type>model/vnd.gtw</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gv</extension>
+        <mime-type>text/vnd.graphviz</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gxf</extension>
+        <mime-type>application/gxf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gxt</extension>
+        <mime-type>application/vnd.geonext</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>gz</extension>
+        <mime-type>application/x-gzip</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>h</extension>
+        <mime-type>text/x-c</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>h261</extension>
+        <mime-type>video/h261</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>h263</extension>
+        <mime-type>video/h263</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>h264</extension>
+        <mime-type>video/h264</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hal</extension>
+        <mime-type>application/vnd.hal+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hbci</extension>
+        <mime-type>application/vnd.hbci</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hdf</extension>
+        <mime-type>application/x-hdf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hh</extension>
+        <mime-type>text/x-c</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hlp</extension>
+        <mime-type>application/winhlp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hpgl</extension>
+        <mime-type>application/vnd.hp-hpgl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hpid</extension>
+        <mime-type>application/vnd.hp-hpid</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hps</extension>
+        <mime-type>application/vnd.hp-hps</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hqx</extension>
+        <mime-type>application/mac-binhex40</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>htc</extension>
+        <mime-type>text/x-component</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>htke</extension>
+        <mime-type>application/vnd.kenameaapp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>htm</extension>
+        <mime-type>text/html</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>html</extension>
+        <mime-type>text/html</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hvd</extension>
+        <mime-type>application/vnd.yamaha.hv-dic</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hvp</extension>
+        <mime-type>application/vnd.yamaha.hv-voice</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>hvs</extension>
+        <mime-type>application/vnd.yamaha.hv-script</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>i2g</extension>
+        <mime-type>application/vnd.intergeo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>icc</extension>
+        <mime-type>application/vnd.iccprofile</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ice</extension>
+        <mime-type>x-conference/x-cooltalk</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>icm</extension>
+        <mime-type>application/vnd.iccprofile</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ico</extension>
+        <mime-type>image/x-icon</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ics</extension>
+        <mime-type>text/calendar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ief</extension>
+        <mime-type>image/ief</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ifb</extension>
+        <mime-type>text/calendar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ifm</extension>
+        <mime-type>application/vnd.shana.informed.formdata</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>iges</extension>
+        <mime-type>model/iges</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>igl</extension>
+        <mime-type>application/vnd.igloader</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>igm</extension>
+        <mime-type>application/vnd.insors.igm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>igs</extension>
+        <mime-type>model/iges</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>igx</extension>
+        <mime-type>application/vnd.micrografx.igx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>iif</extension>
+        <mime-type>application/vnd.shana.informed.interchange</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>imp</extension>
+        <mime-type>application/vnd.accpac.simply.imp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ims</extension>
+        <mime-type>application/vnd.ms-ims</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>in</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ink</extension>
+        <mime-type>application/inkml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>inkml</extension>
+        <mime-type>application/inkml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>install</extension>
+        <mime-type>application/x-install-instructions</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>iota</extension>
+        <mime-type>application/vnd.astraea-software.iota</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ipfix</extension>
+        <mime-type>application/ipfix</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ipk</extension>
+        <mime-type>application/vnd.shana.informed.package</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>irm</extension>
+        <mime-type>application/vnd.ibm.rights-management</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>irp</extension>
+        <mime-type>application/vnd.irepository.package+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>iso</extension>
+        <mime-type>application/x-iso9660-image</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>itp</extension>
+        <mime-type>application/vnd.shana.informed.formtemplate</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ivp</extension>
+        <mime-type>application/vnd.immervision-ivp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ivu</extension>
+        <mime-type>application/vnd.immervision-ivu</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jad</extension>
+        <mime-type>text/vnd.sun.j2me.app-descriptor</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jam</extension>
+        <mime-type>application/vnd.jam</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jar</extension>
+        <mime-type>application/java-archive</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>java</extension>
+        <mime-type>text/x-java-source</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jisp</extension>
+        <mime-type>application/vnd.jisp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jlt</extension>
+        <mime-type>application/vnd.hp-jlyt</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jnlp</extension>
+        <mime-type>application/x-java-jnlp-file</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>joda</extension>
+        <mime-type>application/vnd.joost.joda-archive</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jpe</extension>
+        <mime-type>image/jpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jpeg</extension>
+        <mime-type>image/jpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jpg</extension>
+        <mime-type>image/jpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jpgm</extension>
+        <mime-type>video/jpm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jpgv</extension>
+        <mime-type>video/jpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jpm</extension>
+        <mime-type>video/jpm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>js</extension>
+        <mime-type>application/javascript</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jsf</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>json</extension>
+        <mime-type>application/json</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jsonml</extension>
+        <mime-type>application/jsonml+json</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>jspf</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kar</extension>
+        <mime-type>audio/midi</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>karbon</extension>
+        <mime-type>application/vnd.kde.karbon</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kfo</extension>
+        <mime-type>application/vnd.kde.kformula</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kia</extension>
+        <mime-type>application/vnd.kidspiration</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kml</extension>
+        <mime-type>application/vnd.google-earth.kml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kmz</extension>
+        <mime-type>application/vnd.google-earth.kmz</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kne</extension>
+        <mime-type>application/vnd.kinar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>knp</extension>
+        <mime-type>application/vnd.kinar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kon</extension>
+        <mime-type>application/vnd.kde.kontour</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kpr</extension>
+        <mime-type>application/vnd.kde.kpresenter</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kpt</extension>
+        <mime-type>application/vnd.kde.kpresenter</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kpxx</extension>
+        <mime-type>application/vnd.ds-keypoint</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ksp</extension>
+        <mime-type>application/vnd.kde.kspread</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ktr</extension>
+        <mime-type>application/vnd.kahootz</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ktx</extension>
+        <mime-type>image/ktx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ktz</extension>
+        <mime-type>application/vnd.kahootz</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kwd</extension>
+        <mime-type>application/vnd.kde.kword</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>kwt</extension>
+        <mime-type>application/vnd.kde.kword</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>lasxml</extension>
+        <mime-type>application/vnd.las.las+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>latex</extension>
+        <mime-type>application/x-latex</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>lbd</extension>
+        <mime-type>application/vnd.llamagraphics.life-balance.desktop</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>lbe</extension>
+        <mime-type>application/vnd.llamagraphics.life-balance.exchange+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>les</extension>
+        <mime-type>application/vnd.hhe.lesson-player</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>lha</extension>
+        <mime-type>application/x-lzh-compressed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>link66</extension>
+        <mime-type>application/vnd.route66.link66+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>list</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>list3820</extension>
+        <mime-type>application/vnd.ibm.modcap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>listafp</extension>
+        <mime-type>application/vnd.ibm.modcap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>lnk</extension>
+        <mime-type>application/x-ms-shortcut</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>log</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>lostxml</extension>
+        <mime-type>application/lost+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>lrf</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>lrm</extension>
+        <mime-type>application/vnd.ms-lrm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ltf</extension>
+        <mime-type>application/vnd.frogans.ltf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>lvp</extension>
+        <mime-type>audio/vnd.lucent.voice</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>lwp</extension>
+        <mime-type>application/vnd.lotus-wordpro</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>lzh</extension>
+        <mime-type>application/x-lzh-compressed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m13</extension>
+        <mime-type>application/x-msmediaview</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m14</extension>
+        <mime-type>application/x-msmediaview</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m1v</extension>
+        <mime-type>video/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m21</extension>
+        <mime-type>application/mp21</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m2a</extension>
+        <mime-type>audio/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m2v</extension>
+        <mime-type>video/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m3a</extension>
+        <mime-type>audio/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m3u</extension>
+        <mime-type>audio/x-mpegurl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m3u8</extension>
+        <mime-type>application/vnd.apple.mpegurl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m4a</extension>
+        <mime-type>audio/mp4</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m4b</extension>
+        <mime-type>audio/mp4</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m4r</extension>
+        <mime-type>audio/mp4</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m4u</extension>
+        <mime-type>video/vnd.mpegurl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>m4v</extension>
+        <mime-type>video/mp4</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ma</extension>
+        <mime-type>application/mathematica</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mac</extension>
+        <mime-type>image/x-macpaint</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mads</extension>
+        <mime-type>application/mads+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mag</extension>
+        <mime-type>application/vnd.ecowin.chart</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>maker</extension>
+        <mime-type>application/vnd.framemaker</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>man</extension>
+        <mime-type>text/troff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mar</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mathml</extension>
+        <mime-type>application/mathml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mb</extension>
+        <mime-type>application/mathematica</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mbk</extension>
+        <mime-type>application/vnd.mobius.mbk</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mbox</extension>
+        <mime-type>application/mbox</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mc1</extension>
+        <mime-type>application/vnd.medcalcdata</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mcd</extension>
+        <mime-type>application/vnd.mcd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mcurl</extension>
+        <mime-type>text/vnd.curl.mcurl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mdb</extension>
+        <mime-type>application/x-msaccess</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mdi</extension>
+        <mime-type>image/vnd.ms-modi</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>me</extension>
+        <mime-type>text/troff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mesh</extension>
+        <mime-type>model/mesh</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>meta4</extension>
+        <mime-type>application/metalink4+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>metalink</extension>
+        <mime-type>application/metalink+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mets</extension>
+        <mime-type>application/mets+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mfm</extension>
+        <mime-type>application/vnd.mfmp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mft</extension>
+        <mime-type>application/rpki-manifest</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mgp</extension>
+        <mime-type>application/vnd.osgeo.mapguide.package</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mgz</extension>
+        <mime-type>application/vnd.proteus.magazine</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mid</extension>
+        <mime-type>audio/midi</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>midi</extension>
+        <mime-type>audio/midi</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mie</extension>
+        <mime-type>application/x-mie</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mif</extension>
+        <mime-type>application/x-mif</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mime</extension>
+        <mime-type>message/rfc822</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mj2</extension>
+        <mime-type>video/mj2</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mjp2</extension>
+        <mime-type>video/mj2</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mk3d</extension>
+        <mime-type>video/x-matroska</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mka</extension>
+        <mime-type>audio/x-matroska</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mks</extension>
+        <mime-type>video/x-matroska</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mkv</extension>
+        <mime-type>video/x-matroska</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mlp</extension>
+        <mime-type>application/vnd.dolby.mlp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mmd</extension>
+        <mime-type>application/vnd.chipnuts.karaoke-mmd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mmf</extension>
+        <mime-type>application/vnd.smaf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mmr</extension>
+        <mime-type>image/vnd.fujixerox.edmics-mmr</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mng</extension>
+        <mime-type>video/x-mng</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mny</extension>
+        <mime-type>application/x-msmoney</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mobi</extension>
+        <mime-type>application/x-mobipocket-ebook</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mods</extension>
+        <mime-type>application/mods+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mov</extension>
+        <mime-type>video/quicktime</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>movie</extension>
+        <mime-type>video/x-sgi-movie</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mp1</extension>
+        <mime-type>audio/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mp2</extension>
+        <mime-type>audio/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mp21</extension>
+        <mime-type>application/mp21</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mp2a</extension>
+        <mime-type>audio/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mp3</extension>
+        <mime-type>audio/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mp4</extension>
+        <mime-type>video/mp4</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mp4a</extension>
+        <mime-type>audio/mp4</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mp4s</extension>
+        <mime-type>application/mp4</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mp4v</extension>
+        <mime-type>video/mp4</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpa</extension>
+        <mime-type>audio/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpc</extension>
+        <mime-type>application/vnd.mophun.certificate</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpe</extension>
+        <mime-type>video/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpeg</extension>
+        <mime-type>video/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpega</extension>
+        <mime-type>audio/x-mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpg</extension>
+        <mime-type>video/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpg4</extension>
+        <mime-type>video/mp4</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpga</extension>
+        <mime-type>audio/mpeg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpkg</extension>
+        <mime-type>application/vnd.apple.installer+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpm</extension>
+        <mime-type>application/vnd.blueice.multipass</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpn</extension>
+        <mime-type>application/vnd.mophun.application</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpp</extension>
+        <mime-type>application/vnd.ms-project</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpt</extension>
+        <mime-type>application/vnd.ms-project</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpv2</extension>
+        <mime-type>video/mpeg2</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mpy</extension>
+        <mime-type>application/vnd.ibm.minipay</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mqy</extension>
+        <mime-type>application/vnd.mobius.mqy</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mrc</extension>
+        <mime-type>application/marc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mrcx</extension>
+        <mime-type>application/marcxml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ms</extension>
+        <mime-type>text/troff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mscml</extension>
+        <mime-type>application/mediaservercontrol+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mseed</extension>
+        <mime-type>application/vnd.fdsn.mseed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mseq</extension>
+        <mime-type>application/vnd.mseq</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>msf</extension>
+        <mime-type>application/vnd.epson.msf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>msh</extension>
+        <mime-type>model/mesh</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>msi</extension>
+        <mime-type>application/x-msdownload</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>msl</extension>
+        <mime-type>application/vnd.mobius.msl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>msty</extension>
+        <mime-type>application/vnd.muvee.style</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mts</extension>
+        <mime-type>model/vnd.mts</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mus</extension>
+        <mime-type>application/vnd.musician</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>musicxml</extension>
+        <mime-type>application/vnd.recordare.musicxml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mvb</extension>
+        <mime-type>application/x-msmediaview</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mwf</extension>
+        <mime-type>application/vnd.mfer</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mxf</extension>
+        <mime-type>application/mxf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mxl</extension>
+        <mime-type>application/vnd.recordare.musicxml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mxml</extension>
+        <mime-type>application/xv+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mxs</extension>
+        <mime-type>application/vnd.triscape.mxs</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>mxu</extension>
+        <mime-type>video/vnd.mpegurl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>n-gage</extension>
+        <mime-type>application/vnd.nokia.n-gage.symbian.install</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>n3</extension>
+        <mime-type>text/n3</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nb</extension>
+        <mime-type>application/mathematica</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nbp</extension>
+        <mime-type>application/vnd.wolfram.player</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nc</extension>
+        <mime-type>application/x-netcdf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ncx</extension>
+        <mime-type>application/x-dtbncx+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nfo</extension>
+        <mime-type>text/x-nfo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ngdat</extension>
+        <mime-type>application/vnd.nokia.n-gage.data</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nitf</extension>
+        <mime-type>application/vnd.nitf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nlu</extension>
+        <mime-type>application/vnd.neurolanguage.nlu</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nml</extension>
+        <mime-type>application/vnd.enliven</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nnd</extension>
+        <mime-type>application/vnd.noblenet-directory</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nns</extension>
+        <mime-type>application/vnd.noblenet-sealer</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nnw</extension>
+        <mime-type>application/vnd.noblenet-web</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>npx</extension>
+        <mime-type>image/vnd.net-fpx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nsc</extension>
+        <mime-type>application/x-conference</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nsf</extension>
+        <mime-type>application/vnd.lotus-notes</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ntf</extension>
+        <mime-type>application/vnd.nitf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>nzb</extension>
+        <mime-type>application/x-nzb</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>oa2</extension>
+        <mime-type>application/vnd.fujitsu.oasys2</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>oa3</extension>
+        <mime-type>application/vnd.fujitsu.oasys3</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>oas</extension>
+        <mime-type>application/vnd.fujitsu.oasys</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>obd</extension>
+        <mime-type>application/x-msbinder</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>obj</extension>
+        <mime-type>application/x-tgif</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>oda</extension>
+        <mime-type>application/oda</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Database -->
+        <extension>odb</extension>
+        <mime-type>application/vnd.oasis.opendocument.database</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Chart -->
+        <extension>odc</extension>
+        <mime-type>application/vnd.oasis.opendocument.chart</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Formula -->
+        <extension>odf</extension>
+        <mime-type>application/vnd.oasis.opendocument.formula</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>odft</extension>
+        <mime-type>application/vnd.oasis.opendocument.formula-template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Drawing -->
+        <extension>odg</extension>
+        <mime-type>application/vnd.oasis.opendocument.graphics</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Image -->
+        <extension>odi</extension>
+        <mime-type>application/vnd.oasis.opendocument.image</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Master Document -->
+        <extension>odm</extension>
+        <mime-type>application/vnd.oasis.opendocument.text-master</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Presentation -->
+        <extension>odp</extension>
+        <mime-type>application/vnd.oasis.opendocument.presentation</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Spreadsheet -->
+        <extension>ods</extension>
+        <mime-type>application/vnd.oasis.opendocument.spreadsheet</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Text -->
+        <extension>odt</extension>
+        <mime-type>application/vnd.oasis.opendocument.text</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>oga</extension>
+        <mime-type>audio/ogg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ogg</extension>
+        <mime-type>audio/ogg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ogv</extension>
+        <mime-type>video/ogg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- xiph mime types -->
+        <extension>ogx</extension>
+        <mime-type>application/ogg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>omdoc</extension>
+        <mime-type>application/omdoc+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>onepkg</extension>
+        <mime-type>application/onenote</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>onetmp</extension>
+        <mime-type>application/onenote</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>onetoc</extension>
+        <mime-type>application/onenote</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>onetoc2</extension>
+        <mime-type>application/onenote</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>opf</extension>
+        <mime-type>application/oebps-package+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>opml</extension>
+        <mime-type>text/x-opml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>oprc</extension>
+        <mime-type>application/vnd.palm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>org</extension>
+        <mime-type>application/vnd.lotus-organizer</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>osf</extension>
+        <mime-type>application/vnd.yamaha.openscoreformat</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>osfpvg</extension>
+        <mime-type>application/vnd.yamaha.openscoreformat.osfpvg+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>otc</extension>
+        <mime-type>application/vnd.oasis.opendocument.chart-template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>otf</extension>
+        <mime-type>application/x-font-otf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Drawing Template -->
+        <extension>otg</extension>
+        <mime-type>application/vnd.oasis.opendocument.graphics-template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- HTML Document Template -->
+        <extension>oth</extension>
+        <mime-type>application/vnd.oasis.opendocument.text-web</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>oti</extension>
+        <mime-type>application/vnd.oasis.opendocument.image-template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Presentation Template -->
+        <extension>otp</extension>
+        <mime-type>application/vnd.oasis.opendocument.presentation-template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Spreadsheet Template -->
+        <extension>ots</extension>
+        <mime-type>application/vnd.oasis.opendocument.spreadsheet-template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- OpenDocument Text Template -->
+        <extension>ott</extension>
+        <mime-type>application/vnd.oasis.opendocument.text-template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>oxps</extension>
+        <mime-type>application/oxps</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>oxt</extension>
+        <mime-type>application/vnd.openofficeorg.extension</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>p</extension>
+        <mime-type>text/x-pascal</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>p10</extension>
+        <mime-type>application/pkcs10</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>p12</extension>
+        <mime-type>application/x-pkcs12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>p7b</extension>
+        <mime-type>application/x-pkcs7-certificates</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>p7c</extension>
+        <mime-type>application/pkcs7-mime</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>p7m</extension>
+        <mime-type>application/pkcs7-mime</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>p7r</extension>
+        <mime-type>application/x-pkcs7-certreqresp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>p7s</extension>
+        <mime-type>application/pkcs7-signature</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>p8</extension>
+        <mime-type>application/pkcs8</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pas</extension>
+        <mime-type>text/x-pascal</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>paw</extension>
+        <mime-type>application/vnd.pawaafile</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pbd</extension>
+        <mime-type>application/vnd.powerbuilder6</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pbm</extension>
+        <mime-type>image/x-portable-bitmap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pcap</extension>
+        <mime-type>application/vnd.tcpdump.pcap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pcf</extension>
+        <mime-type>application/x-font-pcf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pcl</extension>
+        <mime-type>application/vnd.hp-pcl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pclxl</extension>
+        <mime-type>application/vnd.hp-pclxl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pct</extension>
+        <mime-type>image/pict</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pcurl</extension>
+        <mime-type>application/vnd.curl.pcurl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pcx</extension>
+        <mime-type>image/x-pcx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pdb</extension>
+        <mime-type>application/vnd.palm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pdf</extension>
+        <mime-type>application/pdf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pfa</extension>
+        <mime-type>application/x-font-type1</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pfb</extension>
+        <mime-type>application/x-font-type1</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pfm</extension>
+        <mime-type>application/x-font-type1</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pfr</extension>
+        <mime-type>application/font-tdpfr</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pfx</extension>
+        <mime-type>application/x-pkcs12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pgm</extension>
+        <mime-type>image/x-portable-graymap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pgn</extension>
+        <mime-type>application/x-chess-pgn</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pgp</extension>
+        <mime-type>application/pgp-encrypted</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pic</extension>
+        <mime-type>image/pict</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pict</extension>
+        <mime-type>image/pict</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pkg</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pki</extension>
+        <mime-type>application/pkixcmp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pkipath</extension>
+        <mime-type>application/pkix-pkipath</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>plb</extension>
+        <mime-type>application/vnd.3gpp.pic-bw-large</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>plc</extension>
+        <mime-type>application/vnd.mobius.plc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>plf</extension>
+        <mime-type>application/vnd.pocketlearn</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pls</extension>
+        <mime-type>audio/x-scpls</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pml</extension>
+        <mime-type>application/vnd.ctc-posml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>png</extension>
+        <mime-type>image/png</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pnm</extension>
+        <mime-type>image/x-portable-anymap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pnt</extension>
+        <mime-type>image/x-macpaint</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>portpkg</extension>
+        <mime-type>application/vnd.macports.portpkg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pot</extension>
+        <mime-type>application/vnd.ms-powerpoint</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>potm</extension>
+        <mime-type>application/vnd.ms-powerpoint.template.macroenabled.12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>potx</extension>
+        <mime-type>application/vnd.openxmlformats-officedocument.presentationml.template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ppam</extension>
+        <mime-type>application/vnd.ms-powerpoint.addin.macroenabled.12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ppd</extension>
+        <mime-type>application/vnd.cups-ppd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ppm</extension>
+        <mime-type>image/x-portable-pixmap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pps</extension>
+        <mime-type>application/vnd.ms-powerpoint</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ppsm</extension>
+        <mime-type>application/vnd.ms-powerpoint.slideshow.macroenabled.12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ppsx</extension>
+        <mime-type>application/vnd.openxmlformats-officedocument.presentationml.slideshow</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ppt</extension>
+        <mime-type>application/vnd.ms-powerpoint</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pptm</extension>
+        <mime-type>application/vnd.ms-powerpoint.presentation.macroenabled.12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pptx</extension>
+        <mime-type>application/vnd.openxmlformats-officedocument.presentationml.presentation</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pqa</extension>
+        <mime-type>application/vnd.palm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>prc</extension>
+        <mime-type>application/x-mobipocket-ebook</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pre</extension>
+        <mime-type>application/vnd.lotus-freelance</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>prf</extension>
+        <mime-type>application/pics-rules</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ps</extension>
+        <mime-type>application/postscript</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>psb</extension>
+        <mime-type>application/vnd.3gpp.pic-bw-small</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>psd</extension>
+        <mime-type>image/vnd.adobe.photoshop</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>psf</extension>
+        <mime-type>application/x-font-linux-psf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pskcxml</extension>
+        <mime-type>application/pskc+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ptid</extension>
+        <mime-type>application/vnd.pvi.ptid1</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pub</extension>
+        <mime-type>application/x-mspublisher</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pvb</extension>
+        <mime-type>application/vnd.3gpp.pic-bw-var</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pwn</extension>
+        <mime-type>application/vnd.3m.post-it-notes</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pya</extension>
+        <mime-type>audio/vnd.ms-playready.media.pya</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>pyv</extension>
+        <mime-type>video/vnd.ms-playready.media.pyv</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qam</extension>
+        <mime-type>application/vnd.epson.quickanime</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qbo</extension>
+        <mime-type>application/vnd.intu.qbo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qfx</extension>
+        <mime-type>application/vnd.intu.qfx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qps</extension>
+        <mime-type>application/vnd.publishare-delta-tree</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qt</extension>
+        <mime-type>video/quicktime</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qti</extension>
+        <mime-type>image/x-quicktime</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qtif</extension>
+        <mime-type>image/x-quicktime</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qwd</extension>
+        <mime-type>application/vnd.quark.quarkxpress</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qwt</extension>
+        <mime-type>application/vnd.quark.quarkxpress</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qxb</extension>
+        <mime-type>application/vnd.quark.quarkxpress</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qxd</extension>
+        <mime-type>application/vnd.quark.quarkxpress</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qxl</extension>
+        <mime-type>application/vnd.quark.quarkxpress</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>qxt</extension>
+        <mime-type>application/vnd.quark.quarkxpress</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ra</extension>
+        <mime-type>audio/x-pn-realaudio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ram</extension>
+        <mime-type>audio/x-pn-realaudio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rar</extension>
+        <mime-type>application/x-rar-compressed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ras</extension>
+        <mime-type>image/x-cmu-raster</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rcprofile</extension>
+        <mime-type>application/vnd.ipunplugged.rcprofile</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rdf</extension>
+        <mime-type>application/rdf+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rdz</extension>
+        <mime-type>application/vnd.data-vision.rdz</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rep</extension>
+        <mime-type>application/vnd.businessobjects</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>res</extension>
+        <mime-type>application/x-dtbresource+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rgb</extension>
+        <mime-type>image/x-rgb</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rif</extension>
+        <mime-type>application/reginfo+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rip</extension>
+        <mime-type>audio/vnd.rip</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ris</extension>
+        <mime-type>application/x-research-info-systems</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rl</extension>
+        <mime-type>application/resource-lists+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rlc</extension>
+        <mime-type>image/vnd.fujixerox.edmics-rlc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rld</extension>
+        <mime-type>application/resource-lists-diff+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rm</extension>
+        <mime-type>application/vnd.rn-realmedia</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rmi</extension>
+        <mime-type>audio/midi</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rmp</extension>
+        <mime-type>audio/x-pn-realaudio-plugin</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rms</extension>
+        <mime-type>application/vnd.jcp.javame.midlet-rms</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rmvb</extension>
+        <mime-type>application/vnd.rn-realmedia-vbr</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rnc</extension>
+        <mime-type>application/relax-ng-compact-syntax</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>roa</extension>
+        <mime-type>application/rpki-roa</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>roff</extension>
+        <mime-type>text/troff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rp9</extension>
+        <mime-type>application/vnd.cloanto.rp9</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rpss</extension>
+        <mime-type>application/vnd.nokia.radio-presets</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rpst</extension>
+        <mime-type>application/vnd.nokia.radio-preset</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rq</extension>
+        <mime-type>application/sparql-query</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rs</extension>
+        <mime-type>application/rls-services+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rsd</extension>
+        <mime-type>application/rsd+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rss</extension>
+        <mime-type>application/rss+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rtf</extension>
+        <mime-type>application/rtf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>rtx</extension>
+        <mime-type>text/richtext</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>s</extension>
+        <mime-type>text/x-asm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>s3m</extension>
+        <mime-type>audio/s3m</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>saf</extension>
+        <mime-type>application/vnd.yamaha.smaf-audio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sbml</extension>
+        <mime-type>application/sbml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sc</extension>
+        <mime-type>application/vnd.ibm.secure-container</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>scd</extension>
+        <mime-type>application/x-msschedule</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>scm</extension>
+        <mime-type>application/vnd.lotus-screencam</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>scq</extension>
+        <mime-type>application/scvp-cv-request</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>scs</extension>
+        <mime-type>application/scvp-cv-response</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>scurl</extension>
+        <mime-type>text/vnd.curl.scurl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sda</extension>
+        <mime-type>application/vnd.stardivision.draw</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sdc</extension>
+        <mime-type>application/vnd.stardivision.calc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sdd</extension>
+        <mime-type>application/vnd.stardivision.impress</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sdkd</extension>
+        <mime-type>application/vnd.solent.sdkm+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sdkm</extension>
+        <mime-type>application/vnd.solent.sdkm+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sdp</extension>
+        <mime-type>application/sdp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sdw</extension>
+        <mime-type>application/vnd.stardivision.writer</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>see</extension>
+        <mime-type>application/vnd.seemail</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>seed</extension>
+        <mime-type>application/vnd.fdsn.seed</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sema</extension>
+        <mime-type>application/vnd.sema</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>semd</extension>
+        <mime-type>application/vnd.semd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>semf</extension>
+        <mime-type>application/vnd.semf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ser</extension>
+        <mime-type>application/java-serialized-object</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>setpay</extension>
+        <mime-type>application/set-payment-initiation</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>setreg</extension>
+        <mime-type>application/set-registration-initiation</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sfd-hdstx</extension>
+        <mime-type>application/vnd.hydrostatix.sof-data</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sfs</extension>
+        <mime-type>application/vnd.spotfire.sfs</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sfv</extension>
+        <mime-type>text/x-sfv</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sgi</extension>
+        <mime-type>image/sgi</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sgl</extension>
+        <mime-type>application/vnd.stardivision.writer-global</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sgm</extension>
+        <mime-type>text/sgml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sgml</extension>
+        <mime-type>text/sgml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sh</extension>
+        <mime-type>application/x-sh</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>shar</extension>
+        <mime-type>application/x-shar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>shf</extension>
+        <mime-type>application/shf+xml</mime-type>
+    </mime-mapping>
+    <!--
+    <mime-mapping>
+        <extension>shtml</extension>
+        <mime-type>text/x-server-parsed-html</mime-type>
+    </mime-mapping>
+    -->
+    <mime-mapping>
+        <extension>sid</extension>
+        <mime-type>image/x-mrsid-image</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sig</extension>
+        <mime-type>application/pgp-signature</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sil</extension>
+        <mime-type>audio/silk</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>silo</extension>
+        <mime-type>model/mesh</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sis</extension>
+        <mime-type>application/vnd.symbian.install</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sisx</extension>
+        <mime-type>application/vnd.symbian.install</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sit</extension>
+        <mime-type>application/x-stuffit</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sitx</extension>
+        <mime-type>application/x-stuffitx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>skd</extension>
+        <mime-type>application/vnd.koan</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>skm</extension>
+        <mime-type>application/vnd.koan</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>skp</extension>
+        <mime-type>application/vnd.koan</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>skt</extension>
+        <mime-type>application/vnd.koan</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sldm</extension>
+        <mime-type>application/vnd.ms-powerpoint.slide.macroenabled.12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sldx</extension>
+        <mime-type>application/vnd.openxmlformats-officedocument.presentationml.slide</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>slt</extension>
+        <mime-type>application/vnd.epson.salt</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sm</extension>
+        <mime-type>application/vnd.stepmania.stepchart</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>smf</extension>
+        <mime-type>application/vnd.stardivision.math</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>smi</extension>
+        <mime-type>application/smil+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>smil</extension>
+        <mime-type>application/smil+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>smv</extension>
+        <mime-type>video/x-smv</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>smzip</extension>
+        <mime-type>application/vnd.stepmania.package</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>snd</extension>
+        <mime-type>audio/basic</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>snf</extension>
+        <mime-type>application/x-font-snf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>so</extension>
+        <mime-type>application/octet-stream</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>spc</extension>
+        <mime-type>application/x-pkcs7-certificates</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>spf</extension>
+        <mime-type>application/vnd.yamaha.smaf-phrase</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>spl</extension>
+        <mime-type>application/x-futuresplash</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>spot</extension>
+        <mime-type>text/vnd.in3d.spot</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>spp</extension>
+        <mime-type>application/scvp-vp-response</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>spq</extension>
+        <mime-type>application/scvp-vp-request</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>spx</extension>
+        <mime-type>audio/ogg</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sql</extension>
+        <mime-type>application/x-sql</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>src</extension>
+        <mime-type>application/x-wais-source</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>srt</extension>
+        <mime-type>application/x-subrip</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sru</extension>
+        <mime-type>application/sru+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>srx</extension>
+        <mime-type>application/sparql-results+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ssdl</extension>
+        <mime-type>application/ssdl+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sse</extension>
+        <mime-type>application/vnd.kodak-descriptor</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ssf</extension>
+        <mime-type>application/vnd.epson.ssf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ssml</extension>
+        <mime-type>application/ssml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>st</extension>
+        <mime-type>application/vnd.sailingtracker.track</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>stc</extension>
+        <mime-type>application/vnd.sun.xml.calc.template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>std</extension>
+        <mime-type>application/vnd.sun.xml.draw.template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>stf</extension>
+        <mime-type>application/vnd.wt.stf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sti</extension>
+        <mime-type>application/vnd.sun.xml.impress.template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>stk</extension>
+        <mime-type>application/hyperstudio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>stl</extension>
+        <mime-type>application/vnd.ms-pki.stl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>str</extension>
+        <mime-type>application/vnd.pg.format</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>stw</extension>
+        <mime-type>application/vnd.sun.xml.writer.template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sub</extension>
+        <mime-type>text/vnd.dvb.subtitle</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sus</extension>
+        <mime-type>application/vnd.sus-calendar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>susp</extension>
+        <mime-type>application/vnd.sus-calendar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sv4cpio</extension>
+        <mime-type>application/x-sv4cpio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sv4crc</extension>
+        <mime-type>application/x-sv4crc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>svc</extension>
+        <mime-type>application/vnd.dvb.service</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>svd</extension>
+        <mime-type>application/vnd.svd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>svg</extension>
+        <mime-type>image/svg+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>svgz</extension>
+        <mime-type>image/svg+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>swa</extension>
+        <mime-type>application/x-director</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>swf</extension>
+        <mime-type>application/x-shockwave-flash</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>swi</extension>
+        <mime-type>application/vnd.aristanetworks.swi</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sxc</extension>
+        <mime-type>application/vnd.sun.xml.calc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sxd</extension>
+        <mime-type>application/vnd.sun.xml.draw</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sxg</extension>
+        <mime-type>application/vnd.sun.xml.writer.global</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sxi</extension>
+        <mime-type>application/vnd.sun.xml.impress</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sxm</extension>
+        <mime-type>application/vnd.sun.xml.math</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>sxw</extension>
+        <mime-type>application/vnd.sun.xml.writer</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>t</extension>
+        <mime-type>text/troff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>t3</extension>
+        <mime-type>application/x-t3vm-image</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>taglet</extension>
+        <mime-type>application/vnd.mynfc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tao</extension>
+        <mime-type>application/vnd.tao.intent-module-archive</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tar</extension>
+        <mime-type>application/x-tar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tcap</extension>
+        <mime-type>application/vnd.3gpp2.tcap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tcl</extension>
+        <mime-type>application/x-tcl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>teacher</extension>
+        <mime-type>application/vnd.smart.teacher</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tei</extension>
+        <mime-type>application/tei+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>teicorpus</extension>
+        <mime-type>application/tei+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tex</extension>
+        <mime-type>application/x-tex</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>texi</extension>
+        <mime-type>application/x-texinfo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>texinfo</extension>
+        <mime-type>application/x-texinfo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>text</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tfi</extension>
+        <mime-type>application/thraud+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tfm</extension>
+        <mime-type>application/x-tex-tfm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tga</extension>
+        <mime-type>image/x-tga</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>thmx</extension>
+        <mime-type>application/vnd.ms-officetheme</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tif</extension>
+        <mime-type>image/tiff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tiff</extension>
+        <mime-type>image/tiff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tmo</extension>
+        <mime-type>application/vnd.tmobile-livetv</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>torrent</extension>
+        <mime-type>application/x-bittorrent</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tpl</extension>
+        <mime-type>application/vnd.groove-tool-template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tpt</extension>
+        <mime-type>application/vnd.trid.tpt</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tr</extension>
+        <mime-type>text/troff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tra</extension>
+        <mime-type>application/vnd.trueapp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>trm</extension>
+        <mime-type>application/x-msterminal</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tsd</extension>
+        <mime-type>application/timestamped-data</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>tsv</extension>
+        <mime-type>text/tab-separated-values</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ttc</extension>
+        <mime-type>application/x-font-ttf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ttf</extension>
+        <mime-type>application/x-font-ttf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ttl</extension>
+        <mime-type>text/turtle</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>twd</extension>
+        <mime-type>application/vnd.simtech-mindmapper</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>twds</extension>
+        <mime-type>application/vnd.simtech-mindmapper</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>txd</extension>
+        <mime-type>application/vnd.genomatix.tuxedo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>txf</extension>
+        <mime-type>application/vnd.mobius.txf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>txt</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>u32</extension>
+        <mime-type>application/x-authorware-bin</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>udeb</extension>
+        <mime-type>application/x-debian-package</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ufd</extension>
+        <mime-type>application/vnd.ufdl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ufdl</extension>
+        <mime-type>application/vnd.ufdl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ulw</extension>
+        <mime-type>audio/basic</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ulx</extension>
+        <mime-type>application/x-glulx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>umj</extension>
+        <mime-type>application/vnd.umajin</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>unityweb</extension>
+        <mime-type>application/vnd.unity</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uoml</extension>
+        <mime-type>application/vnd.uoml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uri</extension>
+        <mime-type>text/uri-list</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uris</extension>
+        <mime-type>text/uri-list</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>urls</extension>
+        <mime-type>text/uri-list</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>ustar</extension>
+        <mime-type>application/x-ustar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>utz</extension>
+        <mime-type>application/vnd.uiq.theme</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uu</extension>
+        <mime-type>text/x-uuencode</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uva</extension>
+        <mime-type>audio/vnd.dece.audio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvd</extension>
+        <mime-type>application/vnd.dece.data</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvf</extension>
+        <mime-type>application/vnd.dece.data</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvg</extension>
+        <mime-type>image/vnd.dece.graphic</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvh</extension>
+        <mime-type>video/vnd.dece.hd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvi</extension>
+        <mime-type>image/vnd.dece.graphic</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvm</extension>
+        <mime-type>video/vnd.dece.mobile</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvp</extension>
+        <mime-type>video/vnd.dece.pd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvs</extension>
+        <mime-type>video/vnd.dece.sd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvt</extension>
+        <mime-type>application/vnd.dece.ttml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvu</extension>
+        <mime-type>video/vnd.uvvu.mp4</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvv</extension>
+        <mime-type>video/vnd.dece.video</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvva</extension>
+        <mime-type>audio/vnd.dece.audio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvd</extension>
+        <mime-type>application/vnd.dece.data</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvf</extension>
+        <mime-type>application/vnd.dece.data</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvg</extension>
+        <mime-type>image/vnd.dece.graphic</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvh</extension>
+        <mime-type>video/vnd.dece.hd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvi</extension>
+        <mime-type>image/vnd.dece.graphic</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvm</extension>
+        <mime-type>video/vnd.dece.mobile</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvp</extension>
+        <mime-type>video/vnd.dece.pd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvs</extension>
+        <mime-type>video/vnd.dece.sd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvt</extension>
+        <mime-type>application/vnd.dece.ttml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvu</extension>
+        <mime-type>video/vnd.uvvu.mp4</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvv</extension>
+        <mime-type>video/vnd.dece.video</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvx</extension>
+        <mime-type>application/vnd.dece.unspecified</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvvz</extension>
+        <mime-type>application/vnd.dece.zip</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvx</extension>
+        <mime-type>application/vnd.dece.unspecified</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>uvz</extension>
+        <mime-type>application/vnd.dece.zip</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vcard</extension>
+        <mime-type>text/vcard</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vcd</extension>
+        <mime-type>application/x-cdlink</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vcf</extension>
+        <mime-type>text/x-vcard</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vcg</extension>
+        <mime-type>application/vnd.groove-vcard</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vcs</extension>
+        <mime-type>text/x-vcalendar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vcx</extension>
+        <mime-type>application/vnd.vcx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vis</extension>
+        <mime-type>application/vnd.visionary</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>viv</extension>
+        <mime-type>video/vnd.vivo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vob</extension>
+        <mime-type>video/x-ms-vob</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vor</extension>
+        <mime-type>application/vnd.stardivision.writer</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vox</extension>
+        <mime-type>application/x-authorware-bin</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vrml</extension>
+        <mime-type>model/vrml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vsd</extension>
+        <mime-type>application/vnd.visio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vsf</extension>
+        <mime-type>application/vnd.vsf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vss</extension>
+        <mime-type>application/vnd.visio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vst</extension>
+        <mime-type>application/vnd.visio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vsw</extension>
+        <mime-type>application/vnd.visio</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vtu</extension>
+        <mime-type>model/vnd.vtu</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>vxml</extension>
+        <mime-type>application/voicexml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>w3d</extension>
+        <mime-type>application/x-director</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wad</extension>
+        <mime-type>application/x-doom</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wav</extension>
+        <mime-type>audio/x-wav</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wax</extension>
+        <mime-type>audio/x-ms-wax</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- Wireless Bitmap -->
+        <extension>wbmp</extension>
+        <mime-type>image/vnd.wap.wbmp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wbs</extension>
+        <mime-type>application/vnd.criticaltools.wbs+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wbxml</extension>
+        <mime-type>application/vnd.wap.wbxml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wcm</extension>
+        <mime-type>application/vnd.ms-works</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wdb</extension>
+        <mime-type>application/vnd.ms-works</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wdp</extension>
+        <mime-type>image/vnd.ms-photo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>weba</extension>
+        <mime-type>audio/webm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>webm</extension>
+        <mime-type>video/webm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>webp</extension>
+        <mime-type>image/webp</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wg</extension>
+        <mime-type>application/vnd.pmi.widget</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wgt</extension>
+        <mime-type>application/widget</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wks</extension>
+        <mime-type>application/vnd.ms-works</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wm</extension>
+        <mime-type>video/x-ms-wm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wma</extension>
+        <mime-type>audio/x-ms-wma</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wmd</extension>
+        <mime-type>application/x-ms-wmd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wmf</extension>
+        <mime-type>application/x-msmetafile</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- WML Source -->
+        <extension>wml</extension>
+        <mime-type>text/vnd.wap.wml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- Compiled WML -->
+        <extension>wmlc</extension>
+        <mime-type>application/vnd.wap.wmlc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- WML Script Source -->
+        <extension>wmls</extension>
+        <mime-type>text/vnd.wap.wmlscript</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <!-- Compiled WML Script -->
+        <extension>wmlsc</extension>
+        <mime-type>application/vnd.wap.wmlscriptc</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wmv</extension>
+        <mime-type>video/x-ms-wmv</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wmx</extension>
+        <mime-type>video/x-ms-wmx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wmz</extension>
+        <mime-type>application/x-msmetafile</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>woff</extension>
+        <mime-type>application/x-font-woff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wpd</extension>
+        <mime-type>application/vnd.wordperfect</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wpl</extension>
+        <mime-type>application/vnd.ms-wpl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wps</extension>
+        <mime-type>application/vnd.ms-works</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wqd</extension>
+        <mime-type>application/vnd.wqd</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wri</extension>
+        <mime-type>application/x-mswrite</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wrl</extension>
+        <mime-type>model/vrml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wsdl</extension>
+        <mime-type>application/wsdl+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wspolicy</extension>
+        <mime-type>application/wspolicy+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wtb</extension>
+        <mime-type>application/vnd.webturbo</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>wvx</extension>
+        <mime-type>video/x-ms-wvx</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>x32</extension>
+        <mime-type>application/x-authorware-bin</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>x3d</extension>
+        <mime-type>model/x3d+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>x3db</extension>
+        <mime-type>model/x3d+binary</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>x3dbz</extension>
+        <mime-type>model/x3d+binary</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>x3dv</extension>
+        <mime-type>model/x3d+vrml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>x3dvz</extension>
+        <mime-type>model/x3d+vrml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>x3dz</extension>
+        <mime-type>model/x3d+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xaml</extension>
+        <mime-type>application/xaml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xap</extension>
+        <mime-type>application/x-silverlight-app</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xar</extension>
+        <mime-type>application/vnd.xara</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xbap</extension>
+        <mime-type>application/x-ms-xbap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xbd</extension>
+        <mime-type>application/vnd.fujixerox.docuworks.binder</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xbm</extension>
+        <mime-type>image/x-xbitmap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xdf</extension>
+        <mime-type>application/xcap-diff+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xdm</extension>
+        <mime-type>application/vnd.syncml.dm+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xdp</extension>
+        <mime-type>application/vnd.adobe.xdp+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xdssc</extension>
+        <mime-type>application/dssc+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xdw</extension>
+        <mime-type>application/vnd.fujixerox.docuworks</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xenc</extension>
+        <mime-type>application/xenc+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xer</extension>
+        <mime-type>application/patch-ops-error+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xfdf</extension>
+        <mime-type>application/vnd.adobe.xfdf</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xfdl</extension>
+        <mime-type>application/vnd.xfdl</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xht</extension>
+        <mime-type>application/xhtml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xhtml</extension>
+        <mime-type>application/xhtml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xhvml</extension>
+        <mime-type>application/xv+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xif</extension>
+        <mime-type>image/vnd.xiff</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xla</extension>
+        <mime-type>application/vnd.ms-excel</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xlam</extension>
+        <mime-type>application/vnd.ms-excel.addin.macroenabled.12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xlc</extension>
+        <mime-type>application/vnd.ms-excel</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xlf</extension>
+        <mime-type>application/x-xliff+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xlm</extension>
+        <mime-type>application/vnd.ms-excel</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xls</extension>
+        <mime-type>application/vnd.ms-excel</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xlsb</extension>
+        <mime-type>application/vnd.ms-excel.sheet.binary.macroenabled.12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xlsm</extension>
+        <mime-type>application/vnd.ms-excel.sheet.macroenabled.12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xlsx</extension>
+        <mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xlt</extension>
+        <mime-type>application/vnd.ms-excel</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xltm</extension>
+        <mime-type>application/vnd.ms-excel.template.macroenabled.12</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xltx</extension>
+        <mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.template</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xlw</extension>
+        <mime-type>application/vnd.ms-excel</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xm</extension>
+        <mime-type>audio/xm</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xml</extension>
+        <mime-type>application/xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xo</extension>
+        <mime-type>application/vnd.olpc-sugar</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xop</extension>
+        <mime-type>application/xop+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xpi</extension>
+        <mime-type>application/x-xpinstall</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xpl</extension>
+        <mime-type>application/xproc+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xpm</extension>
+        <mime-type>image/x-xpixmap</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xpr</extension>
+        <mime-type>application/vnd.is-xpr</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xps</extension>
+        <mime-type>application/vnd.ms-xpsdocument</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xpw</extension>
+        <mime-type>application/vnd.intercon.formnet</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xpx</extension>
+        <mime-type>application/vnd.intercon.formnet</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xsl</extension>
+        <mime-type>application/xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xslt</extension>
+        <mime-type>application/xslt+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xsm</extension>
+        <mime-type>application/vnd.syncml+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xspf</extension>
+        <mime-type>application/xspf+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xul</extension>
+        <mime-type>application/vnd.mozilla.xul+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xvm</extension>
+        <mime-type>application/xv+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xvml</extension>
+        <mime-type>application/xv+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xwd</extension>
+        <mime-type>image/x-xwindowdump</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xyz</extension>
+        <mime-type>chemical/x-xyz</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>xz</extension>
+        <mime-type>application/x-xz</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>yang</extension>
+        <mime-type>application/yang</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>yin</extension>
+        <mime-type>application/yin+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>z</extension>
+        <mime-type>application/x-compress</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>Z</extension>
+        <mime-type>application/x-compress</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>z1</extension>
+        <mime-type>application/x-zmachine</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>z2</extension>
+        <mime-type>application/x-zmachine</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>z3</extension>
+        <mime-type>application/x-zmachine</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>z4</extension>
+        <mime-type>application/x-zmachine</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>z5</extension>
+        <mime-type>application/x-zmachine</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>z6</extension>
+        <mime-type>application/x-zmachine</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>z7</extension>
+        <mime-type>application/x-zmachine</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>z8</extension>
+        <mime-type>application/x-zmachine</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>zaz</extension>
+        <mime-type>application/vnd.zzazz.deck+xml</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>zip</extension>
+        <mime-type>application/zip</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>zir</extension>
+        <mime-type>application/vnd.zul</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>zirz</extension>
+        <mime-type>application/vnd.zul</mime-type>
+    </mime-mapping>
+    <mime-mapping>
+        <extension>zmm</extension>
+        <mime-type>application/vnd.handheld-entertainment+xml</mime-type>
+    </mime-mapping>
+
+  <!-- ==================== Default Welcome File List ===================== -->
+  <!-- When a request URI refers to a directory, the default servlet looks  -->
+  <!-- for a "welcome file" within that directory and, if present, to the   -->
+  <!-- corresponding resource URI for display.                              -->
+  <!-- If no welcome files are present, the default servlet either serves a -->
+  <!-- directory listing (see default servlet configuration on how to       -->
+  <!-- customize) or returns a 404 status, depending on the value of the    -->
+  <!-- listings setting.                                                    -->
+  <!--                                                                      -->
+  <!-- If you define welcome files in your own application's web.xml        -->
+  <!-- deployment descriptor, that list *replaces* the list configured      -->
+  <!-- here, so be sure to include any of the default values that you wish  -->
+  <!-- to use within your application.                                       -->
+
+    <welcome-file-list>
+        <welcome-file>index.html</welcome-file>
+        <welcome-file>index.htm</welcome-file>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
+
+</web-app>
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/db/mysql/db-schema.sql b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/db/mysql/db-schema.sql
new file mode 100644 (file)
index 0000000..67da9e6
--- /dev/null
@@ -0,0 +1,46 @@
+--
+--
+--    Copyright (c) 2016, Huawei Technologies Co., Ltd.
+--
+--    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.
+--
+
+/******************drop old database and user***************************/
+use mysql;
+drop database IF  EXISTS vnfmdb;
+delete from user where User='vnfm';
+FLUSH PRIVILEGES;
+
+/******************create new database and user***************************/
+create database vnfmdb CHARACTER SET utf8;
+
+GRANT ALL PRIVILEGES ON vnfmdb.* TO 'vnfm'@'%' IDENTIFIED BY 'vnfm' WITH GRANT OPTION;
+GRANT ALL PRIVILEGES ON mysql.* TO 'vnfm'@'%' IDENTIFIED BY 'vnfm' WITH GRANT OPTION;
+
+GRANT ALL PRIVILEGES ON vnfmdb.* TO 'vnfm'@'localhost' IDENTIFIED BY 'vnfm' WITH GRANT OPTION;
+GRANT ALL PRIVILEGES ON mysql.* TO 'vnfm'@'localhost' IDENTIFIED BY 'vnfm' WITH GRANT OPTION;
+FLUSH PRIVILEGES;
+
+use vnfmdb;
+set Names 'utf8';
+
+/******************drop old table and create new***************************/
+
+DROP TABLE IF EXISTS VNFM;
+CREATE TABLE VNFM (
+       ID                                              VARCHAR(128)       NOT NULL,    
+       VERSION                 VARCHAR(256)       NULL,
+       VNFDID                  VARCHAR(256)       NULL,
+       VNFPACKAGEID            VARCHAR(256)       NULL,
+    CONSTRAINT VNFM PRIMARY KEY(ID)
+);
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/adapterInfo/vnfmadapter2drivermgr.json b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/adapterInfo/vnfmadapter2drivermgr.json
new file mode 100644 (file)
index 0000000..b58b080
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "driverInfo": {
+        "driverName": "hwvnfm",
+        "instanceID": "hwvnfm-0-1",
+        "ip": "127.0.0.1",
+        "port": "8482",
+        "protocol": "http",
+        "services": [{
+                "service_url": "/openoapi/hwvnfm/v1",
+                "support_sys": [{
+                        "type": "vnfm",
+                        "version": "V100R001"
+                    }
+                ]
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/adapterInfo/vnfmadapterinfo.json b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/adapterInfo/vnfmadapterinfo.json
new file mode 100644 (file)
index 0000000..1f1e7d3
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "serviceName": "hwvnfm",
+  "version": "v1",
+  "url": "/openoapi/hwvnfm/v1",
+  "protocol": "REST",
+  "visualRange": "1",
+  "nodes": [
+    {
+      "ip": "127.0.0.1",
+      "port": "8482",
+      "ttl": 0
+    }
+  ]
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/restclient.json b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/restclient.json
new file mode 100644 (file)
index 0000000..17679fe
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "defaultServer":
+    {
+        "host":"127.0.0.1",
+        "port":"80"
+    },
+"ConnectTimeout":"300000",
+"thread":"10",
+"idletimeout":"500000",
+"timeout":"300000"
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/server.p12 b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/server.p12
new file mode 100644 (file)
index 0000000..5bc1b7a
Binary files /dev/null and b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/server.p12 differ
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/sslconf.json b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/sslconf.json
new file mode 100644 (file)
index 0000000..d4c5323
--- /dev/null
@@ -0,0 +1,9 @@
+{
+  "trustStore":"etc/conf/trust.jks",
+  "trustStoreType":"jks",
+  "trustStorePass":"Changeme_123",
+  "keyStore":"etc/conf/server.p12",
+  "keyStoreType":"PKCS12",
+  "keyStorePass":"Changeme_123"
+
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/trust.jks b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/trust.jks
new file mode 100644 (file)
index 0000000..30b62ce
Binary files /dev/null and b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/conf/trust.jks differ
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/vnfpkginfo/vnfd_ids.json b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/vnfpkginfo/vnfd_ids.json
new file mode 100644 (file)
index 0000000..d56e85b
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "vnfdIds":{
+     "vHSS_HW":"1",
+     "vSPGW_HW":"1",
+     "vSBC_vP-CSCF":"1"
+  }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/vnfpkginfo/vnfpkginfo.json b/huawei/vnfmadapter/VnfmadapterService/deployment/src/main/release/etc/vnfpkginfo/vnfpkginfo.json
new file mode 100644 (file)
index 0000000..6c99c4e
--- /dev/null
@@ -0,0 +1,19 @@
+{
+    "template": {
+        "name": "vCPE",
+        "ftp_server_ip": "192.168.237.179",
+        "ftp_server_port": "21",
+        "ftp_username": "ftpsuser",
+        "ftp_password": "ftpsuser",
+        "csar_file_path": "/home/ftpsuser/files/",
+        "csar_file_name": "VCPE_VNF.csar",
+        "vnfd_file_path": "/files/SoftwareImages/",
+        "vnfd_file_name": "vCPE.zip",
+        "image_file_path": "/files/SoftwareImages/",
+        "image_file_name": "ar_img.zip",
+        "software_file_path": "",
+        "software_file_name": "",
+        "catalog": "",
+        "vim_id": "NE=34603199"
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/pom.xml b/huawei/vnfmadapter/VnfmadapterService/pom.xml
new file mode 100644 (file)
index 0000000..e2222f6
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!--
+    Copyright 2016-2017, Huawei Technologies Co., Ltd.
+
+    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.
+ -->
+<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>
+    <parent>
+        <artifactId>vnfmadapter</artifactId>
+        <groupId>org.openo.nfvo</groupId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>vnfmadapter-service-root</artifactId>
+    <version>1.1.0-SNAPSHOT</version>
+    <name>nfvo/drivers/vnfm/svnfm/huawei/vnfmadapter/VnfmadapterService</name>
+    <packaging>pom</packaging>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <package.name>vnfmadapter-service</package.name>
+    </properties>
+
+    <modules>
+        <module>service</module>
+        <module>deployment</module>
+    </modules>
+
+</project>
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/pom.xml b/huawei/vnfmadapter/VnfmadapterService/service/pom.xml
new file mode 100644 (file)
index 0000000..8fc9f51
--- /dev/null
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright 2016-2017, Huawei Technologies Co., Ltd.
+
+    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.
+ -->
+<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>
+    <parent>
+        <groupId>org.openo.nfvo</groupId>
+        <artifactId>vnfmadapter-service-root</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>vnfmadapter-service</artifactId>
+    <name>nfvo/drivers/vnfm/svnfm/huawei/vnfmadapter/VnfmadapterService/service</name>
+    <packaging>war</packaging>
+
+    <dependencies>
+    <dependency>
+  <groupId>org.powermock</groupId>
+  <artifactId>powermock-core</artifactId>
+  <version>1.5.4</version>
+</dependency>
+    <dependency>
+  <groupId>org.powermock</groupId>
+  <artifactId>powermock-api-mockito</artifactId>
+  <version>1.5.4</version>
+</dependency>
+<dependency>
+  <groupId>org.powermock</groupId>
+  <artifactId>powermock-module-junit4</artifactId>
+  <version>1.5.4</version>
+</dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>5.1.36</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+            <version>3.1.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openo.common-services.common-utilities</groupId>
+            <artifactId>commonlib-cbb</artifactId>
+            <version>1.1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openo.common-services.common-utilities</groupId>
+            <artifactId>commonlib-restclient</artifactId>
+            <version>1.1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+               <groupId>org.mybatis</groupId>
+               <artifactId>mybatis-spring</artifactId>
+               <version>1.2.0</version>
+           </dependency>
+           <dependency>
+             <groupId>org.mybatis</groupId>
+             <artifactId>mybatis</artifactId>
+             <version>3.2.7</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-core</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-asm</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-expression</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-aop</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-jdbc</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.jackson</groupId>
+            <artifactId>jackson-jaxrs</artifactId>
+            <version>1.9.2</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>jsr311-api</artifactId>
+            <version>1.1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-client</artifactId>
+            <version>1.12</version>
+        </dependency>
+        <dependency>
+              <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+            <version>3.1.2.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.3.5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient-cache</artifactId>
+            <version>4.3.5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.3.5</version>
+        </dependency>
+
+        <!--dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>com.springsource.org.apache.commons.httpclient</artifactId>
+            <version>3.1.0</version>
+        </dependency-->
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+            <version>3.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.3.5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient-cache</artifactId>
+            <version>4.3.5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.3.5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+            <version>3.1.6</version>
+        </dependency>
+
+        <!-- UT coverage dependency start -->
+       <dependency>
+            <groupId>org.jmockit</groupId>
+            <artifactId>jmockit</artifactId>
+            <version>1.19</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jmockit</groupId>
+            <artifactId>jmockit-coverage</artifactId>
+            <version>1.18</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.8.1</version>
+            <scope>test</scope>
+        </dependency>
+        <!-- UT coverage dependency end -->
+
+
+
+
+    </dependencies>
+</project>
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/mocoserver/VnfmAdapterSuccessServer.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/mocoserver/VnfmAdapterSuccessServer.java
new file mode 100644 (file)
index 0000000..8554f7a
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2016, Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.mocoserver;
+
+import org.openo.sdno.testframework.http.model.HttpRequest;
+import org.openo.sdno.testframework.http.model.HttpResponse;
+import org.openo.sdno.testframework.http.model.HttpRquestResponse;
+import org.openo.sdno.testframework.moco.MocoHttpServer;
+import org.openo.sdno.testframework.moco.responsehandler.MocoResponseHandler;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Aug 2, 2016
+ */
+public class VnfmAdapterSuccessServer extends MocoHttpServer {
+
+    private static final String GET_ALL_CLOUD_FILE =
+            "src/integration-test/resources/vnfmadapter/mocoserver/getallcloudinfo.json";
+
+    private static final String ADD_AUTH_INFO_FILE =
+            "src/integration-test/resources/vnfmadapter/mocoserver/addauthinfo.json";
+
+    private static final String GRANT_VNF_RES_FILE =
+            "src/integration-test/resources/vnfmadapter/mocoserver/grantvnfresource.json";
+
+    private static final String GET_CSAR_INFO_FILE =
+            "src/integration-test/resources/vnfmadapter/mocoserver/getcsarinfo.json";
+
+    private static final String GET_VNFM_INFO_FILE =
+            "src/integration-test/resources/vnfmadapter/mocoserver/getvnfminfo.json";
+
+    private static final String UPLOAD_VNF_INFO_FILE =
+            "src/integration-test/resources/vnfmadapter/mocoserver/uploadvnfpackage.json";
+
+    private static final String GET_VNFD_VER_FILE =
+            "src/integration-test/resources/vnfmadapter/mocoserver/getvnfdversion.json";
+
+    private static final String GET_VNFD_PLAN_FILE =
+            "src/integration-test/resources/vnfmadapter/mocoserver/getvnfdplaninfo.json";
+
+    private static final String REMOVE_VNF_FILE =
+            "src/integration-test/resources/vnfmadapter/mocoserver/removevnf.json";
+
+    private static final String GET_VNF_FILE =
+            "src/integration-test/resources/vnfmadapter/mocoserver/getvnf.json";
+
+    private static final String GET_AUTH_INFO_FILE =
+            "src/integration-test/resources/vnfmadapter/mocoserver/getauthinfo.json";
+
+    public VnfmAdapterSuccessServer() {
+        super();
+    }
+
+    public VnfmAdapterSuccessServer(int port) {
+        super(port);
+    }
+
+    @Override
+    public void addRequestResponsePairs() {
+        this.addRequestResponsePair(GET_ALL_CLOUD_FILE);
+        this.addRequestResponsePair(ADD_AUTH_INFO_FILE);
+        this.addRequestResponsePair(GRANT_VNF_RES_FILE);
+        this.addRequestResponsePair(GET_CSAR_INFO_FILE);
+        this.addRequestResponsePair(GET_VNFM_INFO_FILE);
+        this.addRequestResponsePair(UPLOAD_VNF_INFO_FILE);
+        this.addRequestResponsePair(GET_VNFD_VER_FILE);
+        this.addRequestResponsePair(GET_VNFD_PLAN_FILE);
+        this.addRequestResponsePair(REMOVE_VNF_FILE);
+        this.addRequestResponsePair(GET_VNF_FILE);
+        this.addRequestResponsePair(GET_AUTH_INFO_FILE);
+    }
+
+    private class CreateVimResponseHandler extends MocoResponseHandler {
+
+        @Override
+        public void processRequestandResponse(HttpRquestResponse httpObject) {
+               System.out.println("***********************");
+               System.out.println(httpObject);
+               System.out.println("***********************");
+            HttpRequest httpRequest = httpObject.getRequest();
+            HttpResponse httpResponse = httpObject.getResponse();
+        }
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITAuthRoaFail.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITAuthRoaFail.java
new file mode 100644 (file)
index 0000000..14469b2
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.test;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.mocoserver.VnfmAdapterSuccessServer;
+import org.openo.nfvo.vnfmadapter.util.AddSuccessChecker;
+import org.openo.nfvo.vnfmadapter.util.FailureChecker;
+import org.openo.nfvo.vnfmadapter.util.GetSuccessChecker;
+import org.openo.nfvo.vnfmadapter.util.MyTestManager;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 20, 2016
+ */
+public class ITAuthRoaFail extends MyTestManager {
+
+    private static final String POST_PATH = "src/integration-test/resources/vnfmadapter/testcase/authroa/addauthinfofail.json";
+
+    private VnfmAdapterSuccessServer vnfmAdapterServer = new VnfmAdapterSuccessServer();
+
+
+    @Before
+    public void setup() throws ServiceException, InterruptedException {
+       vnfmAdapterServer.start();
+//     Thread.sleep(1000*30);
+    }
+
+    @After
+    public void tearDown() throws ServiceException {
+       vnfmAdapterServer.stop();
+    }
+
+    @Test
+    public void testOperateSuccess1() throws ServiceException {
+        execTestCase(new File(POST_PATH),new FailureChecker());
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITAuthRoaSuccess.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITAuthRoaSuccess.java
new file mode 100644 (file)
index 0000000..0393571
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.test;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.mocoserver.VnfmAdapterSuccessServer;
+import org.openo.nfvo.vnfmadapter.util.AddSuccessChecker;
+import org.openo.nfvo.vnfmadapter.util.GetSuccessChecker;
+import org.openo.nfvo.vnfmadapter.util.MyTestManager;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 20, 2016
+ */
+public class ITAuthRoaSuccess extends MyTestManager {
+
+    private static final String POST_PATH = "src/integration-test/resources/vnfmadapter/testcase/authroa/addauthinfosuccess.json";
+
+    private VnfmAdapterSuccessServer vnfmAdapterServer = new VnfmAdapterSuccessServer();
+
+
+    @Before
+    public void setup() throws ServiceException, InterruptedException {
+       vnfmAdapterServer.start();
+//     Thread.sleep(1000*30);
+    }
+
+    @After
+    public void tearDown() throws ServiceException {
+       vnfmAdapterServer.stop();
+    }
+
+    @Test
+    public void testOperateSuccess1() throws ServiceException {
+        execTestCase(new File(POST_PATH));
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfAdapterResourceRoaFail.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfAdapterResourceRoaFail.java
new file mode 100644 (file)
index 0000000..8ef66b0
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.test;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.mocoserver.VnfmAdapterSuccessServer;
+import org.openo.nfvo.vnfmadapter.util.FailureChecker;
+import org.openo.nfvo.vnfmadapter.util.GetSuccessChecker;
+import org.openo.nfvo.vnfmadapter.util.MyTestManager;
+import org.openo.nfvo.vnfmadapter.util.SuccessChecker;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 24, 2016
+ */
+public class ITVnfAdapterResourceRoaFail extends MyTestManager {
+
+    private static final String GET_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfadapterresourceroa/querygetallcloudinfofail.json";
+
+    private VnfmAdapterSuccessServer vnfmAdapterServer = new VnfmAdapterSuccessServer(31943);
+
+
+    @Before
+    public void setup() throws ServiceException, InterruptedException {
+       vnfmAdapterServer.start();
+//     Thread.sleep(1000*30);
+    }
+
+    @After
+    public void tearDown() throws ServiceException {
+       vnfmAdapterServer.stop();
+    }
+
+    @Test
+    public void testOperateSuccess() throws ServiceException {
+        execTestCase(new File(GET_PATH),new FailureChecker());
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfAdapterResourceRoaSuccess.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfAdapterResourceRoaSuccess.java
new file mode 100644 (file)
index 0000000..64ad127
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.test;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.mocoserver.VnfmAdapterSuccessServer;
+import org.openo.nfvo.vnfmadapter.util.GetSuccessChecker;
+import org.openo.nfvo.vnfmadapter.util.MyTestManager;
+import org.openo.nfvo.vnfmadapter.util.SuccessChecker;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 24, 2016
+ */
+public class ITVnfAdapterResourceRoaSuccess extends MyTestManager {
+
+    private static final String GET_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfadapterresourceroa/querygetallcloudinfosuccess.json";
+
+    private VnfmAdapterSuccessServer vnfmAdapterServer = new VnfmAdapterSuccessServer(31943);
+
+
+    @Before
+    public void setup() throws ServiceException, InterruptedException {
+       vnfmAdapterServer.start();
+//     Thread.sleep(1000*30);
+    }
+
+    @After
+    public void tearDown() throws ServiceException {
+       vnfmAdapterServer.stop();
+    }
+
+    @Test
+    public void testOperateSuccess() throws ServiceException {
+        execTestCase(new File(GET_PATH),new GetSuccessChecker());
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfResourceRoaFail.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfResourceRoaFail.java
new file mode 100644 (file)
index 0000000..25aeaa6
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.test;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.mocoserver.VnfmAdapterSuccessServer;
+import org.openo.nfvo.vnfmadapter.util.FailureChecker;
+import org.openo.nfvo.vnfmadapter.util.GetSuccessChecker;
+import org.openo.nfvo.vnfmadapter.util.MyTestManager;
+import org.openo.nfvo.vnfmadapter.util.SuccessChecker;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 24, 2016
+ */
+public class ITVnfResourceRoaFail extends MyTestManager {
+
+    private static final String GET_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfresourceroa/grantvnfresourcefail.json";
+
+    private VnfmAdapterSuccessServer vnfmAdapterServer = new VnfmAdapterSuccessServer();
+
+
+    @Before
+    public void setup() throws ServiceException, InterruptedException {
+       vnfmAdapterServer.start();
+//     Thread.sleep(1000*60);
+    }
+
+    @After
+    public void tearDown() throws ServiceException {
+       vnfmAdapterServer.stop();
+    }
+
+    @Test
+    public void testOperateSuccess() throws ServiceException {
+        execTestCase(new File(GET_PATH),new FailureChecker());
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfResourceRoaSuccess.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfResourceRoaSuccess.java
new file mode 100644 (file)
index 0000000..549ae1c
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.test;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.mocoserver.VnfmAdapterSuccessServer;
+import org.openo.nfvo.vnfmadapter.util.GetSuccessChecker;
+import org.openo.nfvo.vnfmadapter.util.MyTestManager;
+import org.openo.nfvo.vnfmadapter.util.SuccessChecker;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 24, 2016
+ */
+public class ITVnfResourceRoaSuccess extends MyTestManager {
+
+    private static final String GET_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfresourceroa/grantvnfresourcesuccess.json";
+
+    private VnfmAdapterSuccessServer vnfmAdapterServer = new VnfmAdapterSuccessServer();
+
+
+    @Before
+    public void setup() throws ServiceException, InterruptedException {
+       vnfmAdapterServer.start();
+//     Thread.sleep(1000*60);
+    }
+
+    @After
+    public void tearDown() throws ServiceException {
+       vnfmAdapterServer.stop();
+    }
+
+    @Test
+    public void testOperateSuccess() throws ServiceException {
+        execTestCase(new File(GET_PATH),new GetSuccessChecker());
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfRoaFail.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfRoaFail.java
new file mode 100644 (file)
index 0000000..784aa9d
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.test;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.mocoserver.VnfmAdapterSuccessServer;
+import org.openo.nfvo.vnfmadapter.util.FailureChecker;
+import org.openo.nfvo.vnfmadapter.util.MyTestManager;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 24, 2016
+ */
+public class ITVnfRoaFail extends MyTestManager {
+
+    private static final String POST_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfroa/addvnffail.json";
+
+    private static final String DEL_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfroa/deletevnffail.json";
+
+    private static final String GET_VNF_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfroa/getvnffail.json";
+
+    private static final String GET_JOB_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfroa/getjobfail.json";
+
+    private VnfmAdapterSuccessServer vnfmAdapterServer = new VnfmAdapterSuccessServer();
+
+
+    @Before
+    public void setup() throws ServiceException, InterruptedException {
+       vnfmAdapterServer.start();
+//     Thread.sleep(1000*30);
+    }
+
+    @After
+    public void tearDown() throws ServiceException {
+       vnfmAdapterServer.stop();
+    }
+
+    @Test
+    public void testOperateSuccess() throws ServiceException {
+        execTestCase(new File(GET_VNF_PATH),new FailureChecker());
+        execTestCase(new File(POST_PATH),new FailureChecker());
+        execTestCase(new File(GET_JOB_PATH),new FailureChecker());
+        execTestCase(new File(DEL_PATH),new FailureChecker());
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfRoaSuccess.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/test/ITVnfRoaSuccess.java
new file mode 100644 (file)
index 0000000..b2109e1
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.test;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.mocoserver.VnfmAdapterSuccessServer;
+import org.openo.nfvo.vnfmadapter.util.GetSuccessChecker;
+import org.openo.nfvo.vnfmadapter.util.MyTestManager;
+import org.openo.nfvo.vnfmadapter.util.SuccessChecker;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 24, 2016
+ */
+public class ITVnfRoaSuccess extends MyTestManager {
+
+    private static final String POST_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfroa/addvnfsuccess.json";
+
+    private static final String DEL_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfroa/deletevnfsuccess.json";
+
+    private static final String GET_VNF_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfroa/getvnfsuccess.json";
+
+    private static final String GET_JOB_PATH = "src/integration-test/resources/vnfmadapter/testcase/vnfroa/getjobsuccess.json";
+
+    private VnfmAdapterSuccessServer vnfmAdapterServer = new VnfmAdapterSuccessServer();
+
+
+    @Before
+    public void setup() throws ServiceException, InterruptedException {
+       vnfmAdapterServer.start();
+//     Thread.sleep(1000*60);
+    }
+
+    @After
+    public void tearDown() throws ServiceException {
+       vnfmAdapterServer.stop();
+    }
+
+    @Test
+    public void testOperateSuccess() throws ServiceException {
+        execTestCase(new File(GET_VNF_PATH),new GetSuccessChecker());
+//        execTestCase(new File(POST_PATH),new GetSuccessChecker());
+        execTestCase(new File(GET_JOB_PATH),new GetSuccessChecker());
+        execTestCase(new File(DEL_PATH),new GetSuccessChecker());
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/AddSuccessChecker.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/AddSuccessChecker.java
new file mode 100644 (file)
index 0000000..ea0dc39
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.util;
+
+import org.openo.sdno.testframework.checker.IChecker;
+import org.openo.sdno.testframework.http.model.HttpResponse;
+
+import net.sf.json.JSONObject;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 21, 2016
+ */
+public class AddSuccessChecker implements IChecker {
+
+    String addMsg = "org.openo.nfvo.resmanage.common.update.success";
+
+    @Override
+    public boolean check(HttpResponse response) {
+        System.out.println("====================");
+        System.out.println(response);
+        String data = response.getData();
+        System.out.println("********************");
+        System.out.println(data);
+//        JSONObject dataObj = JSONObject.fromObject(data);
+        if(response.getStatus() == 201 && data != null && !data.isEmpty()) {
+               return true;
+        }
+        return false;
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/FailureChecker.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/FailureChecker.java
new file mode 100644 (file)
index 0000000..f1b8f24
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2016, Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.util;
+
+import org.openo.sdno.testframework.checker.IChecker;
+import org.openo.sdno.testframework.http.model.HttpResponse;
+
+import net.sf.json.JSONObject;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Aug 16, 2016
+ */
+public class FailureChecker implements IChecker {
+
+    @Override
+    public boolean check(HttpResponse response) {
+        String data = response.getData();
+        if(response.getStatus() != 200) {
+            return true;
+        }
+        JSONObject dataObj = JSONObject.fromObject(data);
+        int retCode = (int)dataObj.get("retCode");
+        return retCode == -1;
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/GetSuccessChecker.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/GetSuccessChecker.java
new file mode 100644 (file)
index 0000000..3785682
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.util;
+
+import org.openo.sdno.testframework.checker.IChecker;
+import org.openo.sdno.testframework.http.model.HttpResponse;
+
+import net.sf.json.JSONObject;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 21, 2016
+ */
+public class GetSuccessChecker implements IChecker {
+
+    String addMsg = "org.openo.nfvo.resmanage.common.add.success";
+
+    @Override
+    public boolean check(HttpResponse response) {
+        System.out.println("====================");
+        System.out.println(response);
+        String data = response.getData();
+        System.out.println("********************");
+        System.out.println(data);
+//        JSONObject dataObj = JSONObject.fromObject(data);
+//        if(response.getStatus() == 200 && !dataObj.isEmpty()) {
+//            System.out.println(dataObj.isEmpty());
+//            return true;
+//        }
+        if(response.getStatus() == 200 && data != null && !data.isEmpty()) {
+               return true;
+        }
+        return false;
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/MyChecker.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/MyChecker.java
new file mode 100644 (file)
index 0000000..6ff6091
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.util;
+
+import org.openo.sdno.testframework.checker.DefaultChecker;
+import org.openo.sdno.testframework.http.model.HttpResponse;
+
+import net.sf.json.JSONObject;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 21, 2016
+ */
+public class MyChecker extends DefaultChecker {
+
+    private HttpResponse expectedResponse;
+
+    /**
+     * Constructor<br>
+     * <p>
+     * </p>
+     * 
+     * @param expectedResponse
+     * @since NFVO 0.5
+     */
+    public MyChecker(HttpResponse expectedResponse) {
+        super(expectedResponse);
+        this.expectedResponse = expectedResponse;
+    }
+
+    /**
+     * <br>
+     * 
+     * @param response
+     * @return
+     * @since NFVO 0.5
+     */
+    @Override
+    public boolean check(HttpResponse response) {
+       System.out.println("expectedResponse:");
+       System.out.println(expectedResponse.getData());
+       System.out.println("response:");
+        System.out.println(JSONObject.fromObject(response.getData()));
+        return (JSONObject.fromObject(expectedResponse.getData())).equals(JSONObject.fromObject(response.getData()));
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/MyTestManager.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/MyTestManager.java
new file mode 100644 (file)
index 0000000..aa866bb
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.util;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.baseservice.roa.util.restclient.RestfulParametes;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.sdno.testframework.checker.DefaultChecker;
+import org.openo.sdno.testframework.http.model.HttpModelUtils;
+import org.openo.sdno.testframework.http.model.HttpRequest;
+import org.openo.sdno.testframework.http.model.HttpResponse;
+import org.openo.sdno.testframework.http.model.HttpRquestResponse;
+import org.openo.sdno.testframework.restclient.HttpRestClient;
+import org.openo.sdno.testframework.testmanager.TestManager;
+import org.openo.sdno.testframework.util.file.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 21, 2016
+ */
+public class MyTestManager extends TestManager {
+
+    private HttpRestClient restClient;
+
+    public MyTestManager() {
+        restClient = new HttpRestClient();
+    }
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(MyTestManager.class);
+
+    /**
+     * <br>
+     * 
+     * @param file
+     * @return
+     * @throws ServiceException
+     * @since NFVO 0.5
+     */
+    @Override
+    public HttpResponse execTestCase(File file) throws ServiceException {
+        String content = FileUtils.readFromJson(file);
+        HttpRquestResponse httpObject = HttpModelUtils.praseHttpRquestResponse(content);
+        return send(httpObject.getRequest(), httpObject.getResponse());
+    }
+
+    private HttpResponse send(HttpRequest request, HttpResponse response) {
+        try {
+            RestfulResponse responseResult = doSend(request);
+            DefaultChecker checker = new MyChecker(response);
+            HttpResponse httpResponse = HttpModelUtils.convertResponse(responseResult);
+            Assert.assertEquals(Boolean.valueOf(checker.check(httpResponse)), Boolean.valueOf(true));
+            return httpResponse;
+        } catch(ServiceException e) {
+            LOGGER.error("call the restful interface failed.", e);
+        }
+        return null;
+    }
+
+    private RestfulResponse doSend(HttpRequest request) throws ServiceException {
+        String url = request.getUri();
+        String method = request.getMethod();
+        String body = request.getData();
+        RestfulParametes restfulParametes = new RestfulParametes();
+        Map requestHeaders = request.getHeaders();
+        if(null != requestHeaders) {
+            java.util.Map.Entry curEntity;
+            for(Iterator iterator = requestHeaders.entrySet().iterator(); iterator.hasNext(); restfulParametes
+                    .putHttpContextHeader((String)curEntity.getKey(), (String)curEntity.getValue()))
+                curEntity = (java.util.Map.Entry)iterator.next();
+
+        }
+        Map paramMap = request.getQueries();
+        if(null != paramMap)
+            restfulParametes.setParamMap(paramMap);
+        if(null != body)
+            restfulParametes.setRawData(body);
+        return callRestfulMotheds(url, method, restfulParametes);
+    }
+
+    private RestfulResponse callRestfulMotheds(String url, String method, RestfulParametes restfulParametes)
+            throws ServiceException {
+        String s = method;
+        byte byte0 = -1;
+        switch(s.hashCode()) {
+            case 3446944:
+                if(s.equals("post"))
+                    byte0 = 0;
+                break;
+
+            case 102230:
+                if(s.equals("get"))
+                    byte0 = 1;
+                break;
+
+            case 111375:
+                if(s.equals("put"))
+                    byte0 = 2;
+                break;
+
+            case -1335458389:
+                if(s.equals("delete"))
+                    byte0 = 3;
+                break;
+
+            case 3198432:
+                if(s.equals("head"))
+                    byte0 = 4;
+                break;
+
+            case 106438728:
+                if(s.equals("patch"))
+                    byte0 = 5;
+                break;
+        }
+        switch(byte0) {
+            case 0: // '\0'
+                return restClient.post(url, restfulParametes);
+
+            case 1: // '\001'
+                return restClient.get(url, restfulParametes);
+
+            case 2: // '\002'
+                return restClient.put(url, restfulParametes);
+
+            case 3: // '\003'
+                return restClient.delete(url, restfulParametes);
+
+            case 4: // '\004'
+                return restClient.head(url, restfulParametes);
+
+            case 5: // '\005'
+                return restClient.patch(url, restfulParametes);
+        }
+        LOGGER.error("The method is unsupported.");
+        throw new ServiceException("The method is unsupported.");
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/SuccessChecker.java b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/java/org/openo/nfvo/vnfmadapter/util/SuccessChecker.java
new file mode 100644 (file)
index 0000000..dcb40c8
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2016, Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.util;
+
+import org.openo.sdno.testframework.checker.IChecker;
+import org.openo.sdno.testframework.http.model.HttpResponse;
+
+import net.sf.json.JSONObject;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Aug 16, 2016
+ */
+public class SuccessChecker implements IChecker {
+
+    String addMsg = "org.openo.nfvo.resmanage.common.add.success";
+
+    @Override
+    public boolean check(HttpResponse response) {
+        String data = response.getData();
+        System.out.println(data);
+        JSONObject dataObj = JSONObject.fromObject(data);
+        if(response.getStatus() == 200 && addMsg.equals(dataObj.getString("msg"))) {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/server.properties b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/server.properties
new file mode 100644 (file)
index 0000000..44f3fdf
--- /dev/null
@@ -0,0 +1,14 @@
+
+## Integration Test Server Configuration File
+
+## Server IpAddress
+serverip=127.0.0.1
+
+## Server Port
+serverport=8080
+
+## Http Moco Server Port
+mocohttpport=12306
+
+## Https Moco Server Port
+mocohttpsport=12307
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/urlconfig.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/urlconfig.json
new file mode 100644 (file)
index 0000000..9d07650
--- /dev/null
@@ -0,0 +1,18 @@
+[    
+    {
+        "url": "/svc/ipsec/v1",
+        "prefix": "/org.openo.sdno.ipsecservice"
+    },
+    {
+        "url": "/v2.0/tokens",
+        "prefix": ""
+    },
+    {
+        "url": "/v2.0/networks",
+        "prefix": ""
+    },
+    {
+        "url": "/rest/v1/resmanage/virtualnetworks",
+        "prefix": ""
+    } 
+]
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/addauthinfo.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/addauthinfo.json
new file mode 100644 (file)
index 0000000..cd4398b
--- /dev/null
@@ -0,0 +1,36 @@
+{
+    "request": {
+        "uri": "/rest/vnfmmed/v2/auth/tokens",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+            "auth": {
+                "identity": {
+                    "methods": ["password"],
+                    "password": {
+                          "user": {
+                                "name": "admin",
+                                "password": "User@123"
+                          }
+                    }
+                }
+            }
+        }        
+    },
+    "response": {
+        "status": 201,
+        "json": {
+              "token": {
+                  "methods": ["password"],
+                  "expires_at": "",
+                  "user": {
+                      "id": "admin",
+                      "name": "admin"
+                  },
+                  "roa_rand": "RoaRand"
+              }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getallcloudinfo.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getallcloudinfo.json
new file mode 100644 (file)
index 0000000..ab9d35c
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "request": {
+        "uri": "/rest/vnfm/vnfmvim/v2/computeservice/getAllCloud",
+        "method": "get",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+           
+        }
+    },
+    "response": {
+        "status": 200,
+        "json": [{
+            "dn": "NE=34603007"
+        }]
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getauthinfo.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getauthinfo.json
new file mode 100644 (file)
index 0000000..39a7caf
--- /dev/null
@@ -0,0 +1,36 @@
+{
+    "request": {
+        "uri": "/v2/auth/tokens",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+            "auth": {
+                "identity": {
+                    "methods": "password",
+                    "password": {
+                          "user": {
+                                "name": "admin",
+                                "password": "User@123"
+                          }
+                    }
+                }
+            }
+        }        
+    },
+    "response": {
+        "status": 201,
+        "json": {
+              "token": {
+                  "methods": ["password"],
+                  "expires_at": "",
+                  "user": {
+                      "id": "admin",
+                      "name": "admin"
+                  },
+                  "roa_rand": "RoaRand"
+              }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getcsarinfo.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getcsarinfo.json
new file mode 100644 (file)
index 0000000..86d2650
--- /dev/null
@@ -0,0 +1,32 @@
+{
+    "request": {
+        "uri": "/openoapi/catalog/v1/csars/12345",
+        "method": "get",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+           
+        }
+    },
+    "response": {
+        "status": 200,
+        "json": {
+            "csarId":"78ede6f3-66cc-46ab-b748-38a6c010d272",
+            "name":"NanocellGateway",
+            "provider":"ZTE",
+            "version":"V1.0",
+            "deletionPending":"false",
+            "createTime":"2016-06-29 03:33:15",
+            "modifyTime":"2016-06-29 09:33:15",
+            "size":"0.93M",
+            "operationalState":"Disabled",
+            "usageState":"InUse",
+            "onBoardState":"non-onBoarded",
+            "processState":"normal",
+            "format":"yml",
+            "downloadUri":"http://msb_ip:msb_port/files/catalog-http/NSAR/ZTE/NanocellGW/v1.0/NanocellGateway.csar",
+            "type":"NSAR"       
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getjob.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getjob.json
new file mode 100644 (file)
index 0000000..6dbc30e
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "request": {
+        "uri": "/v2/vapps/instances/12345?roarand=123456&type=status",
+        "method": "get",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+        }
+    },
+    "response": {
+        "status": 200,
+        "json": {
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnf.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnf.json
new file mode 100644 (file)
index 0000000..6dbc30e
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "request": {
+        "uri": "/v2/vapps/instances/12345?roarand=123456&type=status",
+        "method": "get",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+        }
+    },
+    "response": {
+        "status": 200,
+        "json": {
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnfdplaninfo.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnfdplaninfo.json
new file mode 100644 (file)
index 0000000..db1d0e0
--- /dev/null
@@ -0,0 +1,29 @@
+{
+    "request": {
+        "uri": "/v2/vapps/templates/12345/plans",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+           "template": {
+                "name": "MME",
+                "catalog": "huawei/epc/mme"
+           }
+        }
+    },
+    "response": {
+        "status": 200,
+        "json": {
+           "template": {
+                "id": "000000001",
+                "name": "MME",
+                "vnfd_catalog": "huawei/epc/mme",
+                "description": "",
+                "vnfd_format": "tosca",
+                "vnfd_file_status": "queued",
+                "image_file_status": "queued"
+           }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnfdversion.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnfdversion.json
new file mode 100644 (file)
index 0000000..4c4ccf3
--- /dev/null
@@ -0,0 +1,29 @@
+{
+    "request": {
+        "uri": "/v2/vapps/templates/12345",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+           "template": {
+                "name": "MME",
+                "catalog": "huawei/epc/mme"
+           }
+        }
+    },
+    "response": {
+        "status": 200,
+        "json": {
+           "template": {
+                "id": "000000001",
+                "name": "MME",
+                "vnfd_catalog": "huawei/epc/mme",
+                "description": "",
+                "vnfd_format": "tosca",
+                "vnfd_file_status": "queued",
+                "image_file_status": "queued"
+           }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnfminfo.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/getvnfminfo.json
new file mode 100644 (file)
index 0000000..c2bb60f
--- /dev/null
@@ -0,0 +1,29 @@
+{
+    "request": {
+        "uri": "/openoapi/extsys/v1/vnfms/12345",
+        "method": "get",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+           
+        }
+    },
+    "response": {
+        "status": 200,
+        "json": {
+            "vnfmId":"19ecbb3a-3242-4fa3-9926-8dfb7ddc29ee",
+            "name":"vnfm",
+            "type":"Tacker",
+            "vimId":"",
+            "vendor":"ZTE",
+            "version":"v1.0",
+            "description":"vnfm",
+            "certificateUrl":"",
+            "url":"http://127.0.0.1:12306",
+            "userName":"admin",
+            "password":"admin",
+            "createTime":"2016-07-06 15:33:18"
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/grantvnfresource.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/grantvnfresource.json
new file mode 100644 (file)
index 0000000..0d729e2
--- /dev/null
@@ -0,0 +1,31 @@
+{
+    "request": {
+        "uri": "/rest/v1/resmanage/vappvm",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+            "vapp": {
+                "id": "",
+                "name": "",
+                "action": "",
+                "used": {
+                     "vcpus": "",
+                     "memory": "",
+                     "disk": ""
+                },
+                "drTotal": {
+                     "vcpus": "0",
+                     "memory": "0",
+                     "disk": "0"                
+                }
+            }
+        }        
+    },
+    "response": {
+        "status": 200,
+        "json": {
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/removevnf.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/removevnf.json
new file mode 100644 (file)
index 0000000..339419c
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "request": {
+        "uri": "/v2/vapps/instances/12345?roarand=123456",
+        "method": "delete",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+        }
+    },
+    "response": {
+        "status": 200,
+        "json": {
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/uploadvnfpackage.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/mocoserver/uploadvnfpackage.json
new file mode 100644 (file)
index 0000000..342c64d
--- /dev/null
@@ -0,0 +1,29 @@
+{
+    "request": {
+        "uri": "/v2/vapps/templates",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+           "template": {
+                "name": "MME",
+                "catalog": "huawei/epc/mme"
+           }
+        }
+    },
+    "response": {
+        "status": 201,
+        "json": {
+           "template": {
+                "id": "000000001",
+                "name": "MME",
+                "vnfd_catalog": "huawei/epc/mme",
+                "description": "",
+                "vnfd_format": "tosca",
+                "vnfd_file_status": "queued",
+                "image_file_status": "queued"
+           }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/authroa/addauthinfofail.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/authroa/addauthinfofail.json
new file mode 100644 (file)
index 0000000..fa85f83
--- /dev/null
@@ -0,0 +1,28 @@
+{
+    "request": {
+        "uri": "/rest/vnfmmed/v2/auth/tokens",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+            "auth": {
+                "identity": {
+                    "methods": ["password"],
+                    "password": {
+                          "user": {
+                                "name": "admin",
+                                "password": "User@123"
+                          }
+                    }
+                }
+            }
+        }        
+    },
+    "response": {
+        "status": 500,
+        "json": {
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/authroa/addauthinfosuccess.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/authroa/addauthinfosuccess.json
new file mode 100644 (file)
index 0000000..cd4398b
--- /dev/null
@@ -0,0 +1,36 @@
+{
+    "request": {
+        "uri": "/rest/vnfmmed/v2/auth/tokens",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+            "auth": {
+                "identity": {
+                    "methods": ["password"],
+                    "password": {
+                          "user": {
+                                "name": "admin",
+                                "password": "User@123"
+                          }
+                    }
+                }
+            }
+        }        
+    },
+    "response": {
+        "status": 201,
+        "json": {
+              "token": {
+                  "methods": ["password"],
+                  "expires_at": "",
+                  "user": {
+                      "id": "admin",
+                      "name": "admin"
+                  },
+                  "roa_rand": "RoaRand"
+              }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfadapterresourceroa/querygetallcloudinfofail.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfadapterresourceroa/querygetallcloudinfofail.json
new file mode 100644 (file)
index 0000000..c38949c
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "request": {
+        "uri": "/rest/rest/vnfm/vnfmvim/v2/computeservice/getAllCloud",
+        "method": "get",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        }
+    },
+    "response": {
+        "status": 404,
+        "json": {
+            
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfadapterresourceroa/querygetallcloudinfosuccess.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfadapterresourceroa/querygetallcloudinfosuccess.json
new file mode 100644 (file)
index 0000000..33beb0c
--- /dev/null
@@ -0,0 +1,17 @@
+{
+    "request": {
+        "uri": "/rest/rest/vnfm/vnfmvim/v2/computeservice/getAllCloud",
+        "method": "get",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        }
+    },
+    "response": {
+        "status": 200,
+        "json": [
+            {
+              "dn": "NE=34603007"
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfresourceroa/grantvnfresourcefail.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfresourceroa/grantvnfresourcefail.json
new file mode 100644 (file)
index 0000000..bc17ede
--- /dev/null
@@ -0,0 +1,39 @@
+{
+    "request": {
+        "uri": "/rest/vnfmmed/csm/v2/vapps/instances/123456/grant",
+        "method": "put",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+            "grant": {
+                "vnf_id":"",
+                "project_id": "",
+                "type": "instantiation",
+                "oparetion_right": "increase",
+                "vnf_name": "",
+                "vm_list": [{
+                       "vm_flavor": {
+                              "vdu_name": "OMU_VDU",
+                              "location": "",
+                              "num_cpus": "",
+                              "mem_size": "",
+                              "proirity": "",
+                              "storage": [{
+                                   "vol_type": "network_storage",
+                                   "vol_size": "512"
+                              }]
+                       },
+                       "init_number": ""
+                }]
+            }
+        }        
+    },
+    "response": {
+        "status": 400,
+        "json": {
+              "grant": {
+              }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfresourceroa/grantvnfresourcesuccess.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfresourceroa/grantvnfresourcesuccess.json
new file mode 100644 (file)
index 0000000..4e2c3ce
--- /dev/null
@@ -0,0 +1,41 @@
+{
+    "request": {
+        "uri": "/rest/vnfmmed/csm/v2/vapps/instances/123456/grant",
+        "method": "put",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+            "grant": {
+                "vnf_id":"",
+                "project_id": "",
+                "type": "instantiation",
+                "oparetion_right": "increase",
+                "vnf_name": "",
+                "vm_list": [{
+                       "vm_flavor": {
+                              "vdu_name": "OMU_VDU",
+                              "location": "",
+                              "num_cpus": "",
+                              "mem_size": "",
+                              "proirity": "",
+                              "storage": [{
+                                   "vol_type": "network_storage",
+                                   "vol_size": "512"
+                              }]
+                       },
+                       "init_number": ""
+                }]
+            }
+        }        
+    },
+    "response": {
+        "status": 200,
+        "json": {
+              "grant": {
+                  "vim_id": "",
+                  "vnf_id": ""
+              }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/addvnffail.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/addvnffail.json
new file mode 100644 (file)
index 0000000..de6fbfb
--- /dev/null
@@ -0,0 +1,45 @@
+{
+    "request": {
+        "uri": "/rest/openoapi/hw-vnfm/v1/12345/vnfs",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+            "VNFM": {
+                "name":"vsnfm1",
+                "url": "https://188.100.100.86:30001",
+                "type": "csm",
+                "version": "v1",
+                "userName": "manoadmin",
+                "sites": ["Miano","Roma"],
+                "pwd": "User@12345",
+                "extro_info": {
+                
+                }
+            }
+        }        
+    },
+    "response": {
+        "status": 400,
+        "json": {
+             "retCode": 1,
+             "data": {
+                "name":"vsnfm1",
+                "updateAt": "2016-09-30 16:03:15",
+                "createAt": "2016-09-30 16:10:15",
+                "id": "fj392842fj32jf392fj392f",
+                "url": "https://188.100.100.86:30001",
+                "type": "csm",
+                "version": "v1",
+                "userName": "manoadmin",
+                "sites": ["Miano","Roma"],
+                "pwd": "User@12345",
+                "extro_info": {
+                
+                },
+                "status": "active"
+              }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/addvnfsuccess.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/addvnfsuccess.json
new file mode 100644 (file)
index 0000000..646d04b
--- /dev/null
@@ -0,0 +1,44 @@
+{
+    "request": {
+        "uri": "/rest/openoapi/hw-vnfm/v1/12345/vnfs",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+                "name":"vsnfm1",
+                "url": "https://188.100.100.86:30001",
+                "type": "csm",
+                "version": "v1",
+                "userName": "manoadmin",
+                "sites": ["Miano","Roma"],
+                "pwd": "User@12345",
+                "vnfPackageId": "12345",
+                "extro_info": {
+                
+                }
+        }        
+    },
+    "response": {
+        "status": 200,
+        "json": {
+             "retCode": 1,
+             "data": {
+                "name":"vsnfm1",
+                "updateAt": "2016-09-30 16:03:15",
+                "createAt": "2016-09-30 16:10:15",
+                "id": "fj392842fj32jf392fj392f",
+                "url": "https://188.100.100.86:30001",
+                "type": "csm",
+                "version": "v1",
+                "userName": "manoadmin",
+                "sites": ["Miano","Roma"],
+                "pwd": "User@12345",
+                "extro_info": {
+                
+                },
+                "status": "active"
+              }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/deletevnffail.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/deletevnffail.json
new file mode 100644 (file)
index 0000000..e2105a9
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "request": {
+        "uri": "/rest/openoapi/hw-vnfm/v1/12345/vnfs/54321/terminate",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+        }        
+    },
+    "response": {
+        "status": 400,
+        "json": {
+             "retCode": 1,
+             "data": "delete vnf success"
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/deletevnfsuccess.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/deletevnfsuccess.json
new file mode 100644 (file)
index 0000000..dce221a
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "request": {
+        "uri": "/rest/openoapi/hw-vnfm/v1/12345/vnfs/54321/terminate",
+        "method": "post",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+        }        
+    },
+    "response": {
+        "status": 200,
+        "json": {
+             "retCode": 1,
+             "data": "delete vnf success"
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getjobfail.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getjobfail.json
new file mode 100644 (file)
index 0000000..fe0937c
--- /dev/null
@@ -0,0 +1,33 @@
+{
+    "request": {
+        "uri": "/rest/openoapi/hw-vnfm/v1/12345/jobs/54321",
+        "method": "get",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+        }        
+    },
+    "response": {
+        "status": 400,
+        "json": {
+             "retCode": 1,
+             "data": {
+                "name":"vsnfm1",
+                "updateAt": "2016-09-30 16:03:15",
+                "createAt": "2016-09-30 16:10:15",
+                "id": "fj392842fj32jf392fj392f",
+                "url": "https://188.100.100.86:30001",
+                "type": "csm",
+                "version": "v1",
+                "userName": "manoadmin",
+                "sites": ["Miano","Roma"],
+                "pwd": "User@12345",
+                "extro_info": {
+                
+                },
+                "status": "active"
+              }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getjobsuccess.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getjobsuccess.json
new file mode 100644 (file)
index 0000000..1aa63ca
--- /dev/null
@@ -0,0 +1,33 @@
+{
+    "request": {
+        "uri": "/rest/openoapi/hw-vnfm/v1/12345/jobs/54321",
+        "method": "get",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+        }        
+    },
+    "response": {
+        "status": 200,
+        "json": {
+             "retCode": 1,
+             "data": {
+                "name":"vsnfm1",
+                "updateAt": "2016-09-30 16:03:15",
+                "createAt": "2016-09-30 16:10:15",
+                "id": "fj392842fj32jf392fj392f",
+                "url": "https://188.100.100.86:30001",
+                "type": "csm",
+                "version": "v1",
+                "userName": "manoadmin",
+                "sites": ["Miano","Roma"],
+                "pwd": "User@12345",
+                "extro_info": {
+                
+                },
+                "status": "active"
+              }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getvnffail.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getvnffail.json
new file mode 100644 (file)
index 0000000..1b0349e
--- /dev/null
@@ -0,0 +1,33 @@
+{
+    "request": {
+        "uri": "/rest/openoapi/hw-vnfm/v1/12345/vnfs/54321",
+        "method": "get",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+        }        
+    },
+    "response": {
+        "status": 400,
+        "json": {
+             "retCode": 1,
+             "data": {
+                "name":"vsnfm1",
+                "updateAt": "2016-09-30 16:03:15",
+                "createAt": "2016-09-30 16:10:15",
+                "id": "fj392842fj32jf392fj392f",
+                "url": "https://188.100.100.86:30001",
+                "type": "csm",
+                "version": "v1",
+                "userName": "manoadmin",
+                "sites": ["Miano","Roma"],
+                "pwd": "User@12345",
+                "extro_info": {
+                
+                },
+                "status": "active"
+              }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getvnfsuccess.json b/huawei/vnfmadapter/VnfmadapterService/service/src/integration-test/resources/vnfmadapter/testcase/vnfroa/getvnfsuccess.json
new file mode 100644 (file)
index 0000000..0b6525a
--- /dev/null
@@ -0,0 +1,33 @@
+{
+    "request": {
+        "uri": "/rest/openoapi/hw-vnfm/v1/12345/vnfs/54321",
+        "method": "get",
+        "headers": {
+            "Content-Type": "application/json;charset=UTF-8"
+        },
+        "json": {
+        }        
+    },
+    "response": {
+        "status": 200,
+        "json": {
+             "retCode": 1,
+             "data": {
+                "name":"vsnfm1",
+                "updateAt": "2016-09-30 16:03:15",
+                "createAt": "2016-09-30 16:10:15",
+                "id": "fj392842fj32jf392fj392f",
+                "url": "https://188.100.100.86:30001",
+                "type": "csm",
+                "version": "v1",
+                "userName": "manoadmin",
+                "sites": ["Miano","Roma"],
+                "pwd": "User@12345",
+                "extro_info": {
+                
+                },
+                "status": "active"
+              }
+        }
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/AsyncCallback.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/AsyncCallback.java
new file mode 100644 (file)
index 0000000..3d2043d
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common;
+
+import org.openo.baseservice.roa.util.restclient.RestfulAsyncCallback;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Async call back.
+ * .</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 10, 2016
+ */
+public class AsyncCallback implements RestfulAsyncCallback {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AsyncCallback.class);
+
+    @Override
+    public void callback(RestfulResponse response) {
+        LOGGER.warn("function=callback, msg=status={}, content={}.", response.getStatus(), response.getResponseContent());
+    }
+
+    @Override
+    public void handleExcepion(Throwable e) {
+        LOGGER.error("function=callback, msg= e is {}.", e);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/DownloadCsarManager.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/DownloadCsarManager.java
new file mode 100644 (file)
index 0000000..8d512e1
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import org.apache.http.Header;
+import org.apache.http.HeaderElement;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+/**
+ * Utility class to download CSAR
+ *
+ * @author
+ * @version      NFVO 0.5  Sep 5, 2016
+ *
+ */
+public class DownloadCsarManager {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DownloadCsarManager.class);
+
+    public static final int CACHE = 100 * 1024;
+
+    private DownloadCsarManager(){
+        //private constructor
+    }
+
+    /**
+     * Download from given URL.
+     * @param url String
+     * @return
+     */
+    public static String download(String url) {
+        return download(url, null);
+    }
+
+    /**
+     * Download from given URL to given file location.
+     * @param url String
+     * @param filepath String
+     * @return
+     */
+    public static String download(String url, String filepath) {
+        String status = "";
+        try {
+            CloseableHttpClient client = HttpClients.createDefault();
+            HttpGet httpget = new HttpGet(url);
+            CloseableHttpResponse response = client.execute(httpget);
+
+            HttpEntity entity = response.getEntity();
+            InputStream is = entity.getContent();
+            if (filepath == null){
+                filepath = getFilePath(response); //NOSONAR
+            }
+
+            File file = new File(filepath);
+            file.getParentFile().mkdirs();
+            FileOutputStream fileout = new FileOutputStream(file);
+
+            byte[] buffer = new byte[CACHE];
+            int ch;
+            while ((ch = is.read(buffer)) != -1) {
+                fileout.write(buffer,0,ch);
+            }
+            is.close();
+            fileout.flush();
+            fileout.close();
+            status = Constant.DOWNLOADCSAR_SUCCESS;
+
+        } catch (Exception e) {
+            status = Constant.DOWNLOADCSAR_FAIL;
+            LOG.error("Download csar file failed! "+ e.getMessage(), e);
+        }
+        return status;
+    }
+
+    /**
+     * Retrieve file path from given response.
+     * @param response HttpResponse
+     * @return
+     */
+    public static String getFilePath(HttpResponse response) {
+        String filepath = System.getProperty("java.home");
+        String filename = getFileName(response);
+
+        if (filename != null) {
+            filepath += filename;
+        } else {
+            filepath += getRandomFileName();
+        }
+        return filepath;
+    }
+
+    /**
+     * Retrieve file name from given response.
+     * @param response HttpResponse
+     * @return
+     */
+    public static String getFileName(HttpResponse response) {
+        Header contentHeader = response.getFirstHeader("Content-Disposition");
+        String filename = null;
+        if (contentHeader != null) {
+            HeaderElement[] values = contentHeader.getElements();
+            if (values.length == 1) {
+                NameValuePair param = values[0].getParameterByName("filename");
+                if (param != null) {
+                    try {
+                        filename = param.getValue();
+                    } catch (Exception e) {
+                        LOG.error("getting filename failed! "+ e.getMessage(), e);
+                    }
+                }
+            }
+        }
+        return filename;
+    }
+
+    /**
+     * Provides random file name.
+     * @return
+     */
+    public static String getRandomFileName() {
+        return String.valueOf(System.currentTimeMillis());
+    }
+    
+    /**
+     * unzip CSAR packge
+     * @param fileName filePath
+     * @return
+     */
+    public static int unzipCSAR(String fileName,String filePath){
+       final int BUFFER = 2048;
+       int status=0;
+       
+        try {
+            ZipFile zipFile = new ZipFile(fileName);
+            Enumeration emu = zipFile.entries();
+            int i=0;
+            while(emu.hasMoreElements()){
+                ZipEntry entry = (ZipEntry)emu.nextElement();
+                //read directory as file first,so only need to create directory 
+                if (entry.isDirectory())
+                {
+                    new File(filePath + entry.getName()).mkdirs();
+                    continue;
+                }
+                BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry));
+                File file = new File(filePath + entry.getName());
+                //Because that is random to read zipfile,maybe the file is read first
+                //before the directory is read,so we need to create directory first.
+                File parent = file.getParentFile();
+                if(parent != null && (!parent.exists())){
+                    parent.mkdirs();
+                }
+                FileOutputStream fos = new FileOutputStream(file);
+                BufferedOutputStream bos = new BufferedOutputStream(fos,BUFFER);           
+                
+                int count;
+                byte data[] = new byte[BUFFER];
+                while ((count = bis.read(data, 0, BUFFER)) != -1)
+                {
+                    bos.write(data, 0, count);
+                }
+                bos.flush();
+                bos.close();
+                bis.close();
+            }
+            status=Constant.UNZIP_SUCCESS;
+            zipFile.close();
+        } catch (Exception e) {
+               status=Constant.UNZIP_FAIL;
+            e.printStackTrace();
+        }
+        return status;
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/RegisterConfigInfo.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/RegisterConfigInfo.java
new file mode 100644 (file)
index 0000000..126af30
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Provide function for reading register parameter.
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version     NFVO 0.5  Aug 25, 2016
+ */
+public class RegisterConfigInfo {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(RegisterConfigInfo.class);
+
+    private String serviceName;
+
+    private String version;
+
+    private String url;
+
+    private String protocol;
+
+    private String ip;
+
+    private String port;
+
+    private String ttl;
+
+    private static RegisterConfigInfo regConfig = new RegisterConfigInfo();
+
+    private RegisterConfigInfo() {
+        ResourceBundle rb = ResourceBundle.getBundle("registerService", Locale.getDefault());
+        serviceName = rb.getString("serviceName");
+        version = rb.getString("version");
+        url = rb.getString("url");
+        protocol = rb.getString("protocol");
+        ip = rb.getString("ip");
+        port = rb.getString("port");
+        ttl = rb.getString("ttl");
+    }
+
+    public static RegisterConfigInfo getInstance() {
+        return regConfig;
+    }
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public String getProtocol() {
+        return protocol;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public String getPort() {
+        return port;
+    }
+
+    public String getTtl() {
+        return ttl;
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/ResultRequestUtil.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/ResultRequestUtil.java
new file mode 100644 (file)
index 0000000..c47ad64
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common;
+
+import java.io.IOException;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import org.apache.commons.httpclient.HttpMethod;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.constant.ParamConstants;
+import org.openo.nfvo.vnfmadapter.service.csm.connect.ConnectMgrVnfm;
+import org.openo.nfvo.vnfmadapter.service.csm.connect.HttpRequests;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONObject;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 25, 2016
+ */
+public final class ResultRequestUtil {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ResultRequestUtil.class);
+
+    private ResultRequestUtil() throws VnfmException {
+        throw new VnfmException("can't be instanced.");
+    }
+
+    /**
+     * common method
+     * <br/>
+     *
+     * @param vnfmObject
+     * @param path
+     *            url defined
+     * @param methodName
+     *            [get, put, delete, post]
+     * @param paramsJson
+     *            raw data with json format, if <code>methodName</code> is get
+     *            or delete, fill it with null
+     * @return
+     * @since NFVO 0.5
+     */
+    public static JSONObject call(JSONObject vnfmObject, String path, String methodName, String paramsJson) {
+        JSONObject resultJson = new JSONObject();
+
+        ConnectMgrVnfm mgrVcmm = new ConnectMgrVnfm();
+
+        if(Constant.HTTP_OK != mgrVcmm.connect(vnfmObject)) {
+            resultJson.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultJson.put("data", "connect fail.");
+            return resultJson;
+        }
+
+        HttpMethod httpMethod = null;
+        try {
+
+            String result = null;
+            String vnfPath = path.contains("%s") ? String.format(path, mgrVcmm.getRoaRand()) : path;
+            LOG.info("function=call, msg=url is {}, session is {}", vnfmObject.getString("url") + vnfPath,
+                    mgrVcmm.getAccessSession());
+            HttpRequests.Builder builder = new HttpRequests.Builder(Constant.ANONYMOUS)
+                    .addHeader(Constant.ACCESSSESSION, mgrVcmm.getAccessSession())
+                    .setUrl(vnfmObject.getString("url"), vnfPath).setParams(paramsJson);
+            MethodType methodType = MethodType.methodType(HttpRequests.Builder.class, new Class[0]);
+            MethodHandle mt =
+                    MethodHandles.lookup().findVirtual(builder.getClass(), methodName, methodType).bindTo(builder);
+
+            builder = (HttpRequests.Builder)mt.invoke();
+            httpMethod = builder.execute();
+            result = httpMethod.getResponseBodyAsString();
+            LOG.warn("function=call, msg=response status is {}. result is {}", httpMethod.getStatusCode(), result);
+            resultJson.put(Constant.RETCODE, httpMethod.getStatusCode());
+            resultJson.put("data", result);
+        } catch(IOException e) {
+            LOG.info("function=call, msg=IOException, e is {}", e);
+        } catch(ReflectiveOperationException e) {
+            LOG.info("function=call, msg=ReflectiveOperationException, e is {}", e);
+        } catch(Throwable e) {
+            LOG.info("function=call, msg=Throwable, e is {}", e);
+        } finally {
+            if(httpMethod != null) {
+                httpMethod.releaseConnection();
+            }
+        }
+
+        if(httpMethod == null) {
+            resultJson.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultJson.put("data", "get connection error");
+        }
+
+        return resultJson;
+    }
+
+    /**
+     * common method
+     * <br/>
+     *
+     * @param vnfmObject
+     * @param path
+     *            url defined
+     * @param methodName
+     *            [get, put, delete, post]
+     * @param paramsJson
+     *            raw data with json format, if <code>methodName</code> is get
+     *            or delete, fill it with null
+     * @return
+     * @since NFVO 0.5
+     */
+    public static JSONObject call(JSONObject vnfmObject, String path, String methodName, String paramsJson,
+            String authModel) {
+        LOG.info("request-param=" + paramsJson + ",authModel=" + authModel + ",path=" + path + ",vnfmInfo="
+                + vnfmObject);
+        JSONObject resultJson = new JSONObject();
+
+        ConnectMgrVnfm mgrVcmm = new ConnectMgrVnfm();
+
+        if(Constant.HTTP_OK != mgrVcmm.connect(vnfmObject, authModel)) {
+            resultJson.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultJson.put("data", "connect fail.");
+            return resultJson;
+        }
+
+        HttpMethod httpMethod = null;
+        try {
+
+            String result = null;
+            String vnfPath = path.contains("%s") ? String.format(path, mgrVcmm.getRoaRand()) : path;
+            LOG.info("function=call, msg=url is {}, session is {}", vnfmObject.getString("url") + vnfPath,
+                    mgrVcmm.getAccessSession());
+            HttpRequests.Builder builder =
+                    new HttpRequests.Builder(authModel).addHeader(Constant.ACCESSSESSION, mgrVcmm.getAccessSession())
+                            .setUrl(vnfmObject.getString("url"), vnfPath).setParams(paramsJson);
+            MethodType methodType = MethodType.methodType(HttpRequests.Builder.class, new Class[0]);
+            MethodHandle mt =
+                    MethodHandles.lookup().findVirtual(builder.getClass(), methodName, methodType).bindTo(builder);
+
+            builder = (HttpRequests.Builder)mt.invoke();
+            httpMethod = builder.execute();
+            result = httpMethod.getResponseBodyAsString();
+            LOG.warn("function=call, msg=response status is {}. result is {}", httpMethod.getStatusCode(), result);
+            resultJson.put(Constant.RETCODE, httpMethod.getStatusCode());
+            resultJson.put("data", result);
+
+            // logout delete tokens
+            String token = mgrVcmm.getAccessSession();
+            String roaRand = mgrVcmm.getRoaRand();
+            String vnfmUrl = vnfmObject.getString("url");
+            removeTokens(vnfmUrl, token, roaRand);
+        } catch(IOException e) {
+            LOG.info("function=call, msg=IOException, e is {}", e);
+        } catch(ReflectiveOperationException e) {
+            LOG.info("function=call, msg=ReflectiveOperationException, e is {}", e);
+        } catch(Throwable e) {
+            LOG.info("function=call, msg=Throwable, e is {}", e);
+        } finally {
+            if(httpMethod != null) {
+                httpMethod.releaseConnection();
+            }
+        }
+
+        if(httpMethod == null) {
+            resultJson.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultJson.put("data", "get connection error");
+        }
+
+        return resultJson;
+    }
+
+    /**
+     * <br>
+     *
+     * @since NFVO 0.5
+     */
+    private static void removeTokens(String vnfmUrl, String token, String roaRand) {
+        HttpMethod httpMethodToken = null;
+        String tokenUrl = String.format(ParamConstants.CSM_AUTH_DISCONNECT, "manoadmin", roaRand);
+        LOG.info("removeTokens tokenUrl=" + tokenUrl);
+        try {
+            httpMethodToken = new HttpRequests.Builder(Constant.CERTIFICATE).setUrl(vnfmUrl.trim(), tokenUrl)
+                    .setParams("").addHeader("X-Auth-Token", token).delete().execute();
+            int statusCode = httpMethodToken.getStatusCode();
+            String result = httpMethodToken.getResponseBodyAsString();
+            LOG.info("removeTokens int=" + statusCode + ", result=" + result);
+        } catch(IOException e) {
+            LOG.info("function=call, msg=IOException, e is {}", e);
+        } catch(Throwable e) {
+            LOG.info("function=call, msg=Throwable, e is {}", e);
+        } finally {
+            if(httpMethodToken != null) {
+                httpMethodToken.releaseConnection();
+            }
+        }
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/VnfmException.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/VnfmException.java
new file mode 100644 (file)
index 0000000..06517ef
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common;
+
+/**
+ * VNFM exception.
+ * .</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 10, 2016
+ */
+public class VnfmException extends Exception {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     * Constructor<br>
+     *
+     * @since  NFVO 0.5
+     */
+    public VnfmException() {
+        super();
+    }
+
+    /**
+     *
+     * Constructor<br>
+     *
+     * @param message
+     * @param cause
+     * @since  NFVO 0.5
+     */
+    public VnfmException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    /**
+     *
+     * Constructor<br>
+     *
+     * @param message
+     * @since  NFVO 0.5
+     */
+    public VnfmException(String message) {
+        super(message);
+    }
+
+    /**
+     *
+     * Constructor<br>
+     *
+     * @param cause
+     * @since  NFVO 0.5
+     */
+    public VnfmException(Throwable cause) {
+        super(cause);
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/VnfmJsonUtil.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/VnfmJsonUtil.java
new file mode 100644 (file)
index 0000000..ab9f793
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+import net.sf.json.util.JSONTokener;
+
+/**
+ * VNFM JSON utils.</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 10, 2016
+ */
+public final class VnfmJsonUtil {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(VnfmJsonUtil.class);
+
+    private VnfmJsonUtil(){
+        //private constructor
+    }
+
+    /**
+     * Get the JSON string from input http context.
+     * <br/>
+     *
+     * @param vnfReq HttpServletRequest
+     * @return
+     * @since  NFVO 0.5
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getJsonFromContexts(HttpServletRequest vnfReq) {
+        try {
+            InputStream vnfInput = vnfReq.getInputStream();
+            String vnfJsonStr = IOUtils.toString(vnfInput);
+            JSONTokener vnfJsonTokener = new JSONTokener(vnfJsonStr);
+
+            if(vnfJsonTokener.nextClean() == Character.codePointAt("{", 0)) {
+                return (T)JSONObject.fromObject(vnfJsonStr);
+            }
+
+            vnfJsonTokener.back();
+
+            if(vnfJsonTokener.nextClean() == Character.codePointAt("[", 0)) {
+                return (T)JSONArray.fromObject(vnfJsonStr);
+            }
+        } catch(IOException e) {
+            LOGGER.error("function=getJsonFromContext, msg=IOException occurs, e={}.", e);
+        } catch(JSONException e) {
+            LOGGER.error("function=getJsonFromContext, msg=JSONException occurs, e={}.", e);
+        }
+
+        return null;
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/VnfmUtil.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/VnfmUtil.java
new file mode 100644 (file)
index 0000000..0da2142
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common;
+
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VnfmRestfulUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.constant.ParamConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+/**
+ * Provide function of getting vnfmInfo
+ * <br/>
+ *
+ * @author
+ * @version     NFVO 0.5  Aug 25, 2016
+ */
+public final class VnfmUtil {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(VnfmUtil.class);
+
+    private VnfmUtil() {
+
+    }
+
+    /**
+     * Get vnfmInfo by ip
+     * <br/>
+     *
+     * @param vnfmId
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static JSONObject getVnfmById(String vnfmId) {
+        RestfulResponse rsp = VnfmRestfulUtil.getRemoteResponse(String.format(ParamConstants.ESR_GET_VNFM_URL, vnfmId),
+                VnfmRestfulUtil.TYPE_GET, null);
+        if(rsp == null || rsp.getStatus() != Constant.HTTP_OK) {
+            LOGGER.error("funtion=getVnfmById, status={}", rsp.getStatus());
+            return null;
+        }
+        return JSONObject.fromObject(rsp.getResponseContent());
+    }
+
+    public static JSONObject mockForTest(String vnfmId){
+        String vInfo = "{\"vnfmId\":\"1234\", \"name\":\"vnfm\", \"type\":\"Tacker\", \"vimId\":\"\", \"vendor\":\"huawei\", \"version\":\"v1.0\", \"description\":\"vnfm\", \"certificateUrl\":\"\", \"url\":\"https://192.168.44.126:30001\", \"userName\":\"manoadmin\", \"password\":\"User@12345\", \"createTime\":\"2016-07-06 15:33:18\"}";
+        JSONObject json = JSONObject.fromObject(vInfo);
+        json.put("vnfmId",vnfmId);
+        return json;
+    }
+
+    /**
+     * Get vnfmInfo by id
+     * <br/>
+     *
+     * @param ip
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static String getVnfmIdByIp(String ip) {
+        RestfulResponse rsp =
+                VnfmRestfulUtil.getRemoteResponse(ParamConstants.ESR_GET_VNFMS_URL, VnfmRestfulUtil.TYPE_GET, null);
+        if(rsp == null || rsp.getStatus() != Constant.HTTP_OK) {
+            return "";
+        }
+
+        JSONArray vnfmList = JSONArray.fromObject(rsp.getResponseContent());
+        LOGGER.info("vnfm ip: {}, vnfmList: {}", ip, vnfmList);
+        for(int i = 0; i < vnfmList.size(); i++) {
+            if(vnfmList.getJSONObject(i).getString("url").contains(ip)) {
+                return vnfmList.getJSONObject(i).getString("vnfmId");
+            }
+        }
+
+        return "";
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/servicetoken/HttpRestfulHelp.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/servicetoken/HttpRestfulHelp.java
new file mode 100644 (file)
index 0000000..9efd9a7
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common.servicetoken;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.openo.baseservice.roa.util.restclient.HttpRest;
+import org.openo.baseservice.roa.util.restclient.Restful;
+
+/**
+ * HTTP Restful helper.
+ * .</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 10, 2016
+ */
+public class HttpRestfulHelp {
+
+    public static final String PROTO_HTTPS = "https";
+
+    public static final String PROTO_HTTP = "http";
+
+    private static final Map<String, Restful> INSTANCES = new HashMap<>(2);
+
+    private HttpRestfulHelp() {
+        // constructor
+    }
+
+    /**
+     * Factory method to create Restful instances.
+     * <br>
+     *
+     * @param ssloptionfile
+     * @param restoptionfile
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static synchronized Restful getRestInstance(String ssloptionfile, String restoptionfile) {
+        Restful rest = INSTANCES.get(PROTO_HTTP);
+        if(rest != null) {
+            return rest;
+        }
+        rest = createHttpsRest(ssloptionfile, restoptionfile);
+        INSTANCES.put(PROTO_HTTP, rest);
+        return rest;
+    }
+
+    private static Restful createHttpsRest(String ssloptionfile, String restoptionfile) { //NOSONAR
+        return new HttpRest();
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VNFRestfulUtil.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VNFRestfulUtil.java
new file mode 100644 (file)
index 0000000..cf7c986
--- /dev/null
@@ -0,0 +1,460 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common.servicetoken;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.baseservice.roa.util.restclient.Restful;
+import org.openo.baseservice.roa.util.restclient.RestfulAsyncCallback;
+import org.openo.baseservice.roa.util.restclient.RestfulFactory;
+import org.openo.baseservice.roa.util.restclient.RestfulOptions;
+import org.openo.baseservice.roa.util.restclient.RestfulParametes;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+/**
+ * Utility class.</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 10, 2016
+ */
+public final class VNFRestfulUtil {
+
+    public static final String TYPE_GET = "get";
+
+    public static final String TYPE_ADD = "add";
+
+    public static final String TYPE_POST = "post";
+
+    public static final String TYPE_PUT = "put";
+
+    public static final String TYPE_DEL = "delete";
+
+    public static final int ERROR_STATUS_CODE = -1;
+
+    public static final String CONTENT_TYPE = "Content-type";
+
+    public static final String APPLICATION = "application/json";
+
+    private static final Logger LOG = LoggerFactory.getLogger(VNFRestfulUtil.class);
+
+    private VNFRestfulUtil() {
+
+    }
+
+    /**
+     * within our module, we support a default method to invoke
+     *
+     * @param methodNames String
+     * @param path
+     *            rest service url
+     * @param methodName
+     *            [post, delete, put, get, asyncPost, asyncDelete, asyncPut,
+     *            asyncGet]
+     * @param bodyParam
+     *            rest body msg
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public static RestfulResponse getRestResByDefault(String path, String methodNames, JSONObject bodyParam) {
+        RestfulParametes restParametes = new RestfulParametes();
+        Map<String, String> headerMap = new HashMap<>(2);
+        headerMap.put(Constant.CONTENT_TYPE, Constant.APPLICATION);
+        restParametes.setHeaderMap(headerMap);
+
+        if(Constant.GET.equals(methodNames) || Constant.DELETE.equals(methodNames)) {
+            if(null != bodyParam) {
+                Map<String, String> vnfParamMap = new HashMap<>(Constant.DEFAULT_COLLECTION_SIZE);
+                if(path.contains("?")) {
+                    String[] vnFutlList = path.split("\\?");
+                    String[] vnFparams = vnFutlList[1].split("&");
+                    int paramsSize = vnFparams.length;
+
+                    for(int i = 0; i < paramsSize; i++) {
+                        vnfParamMap.put(vnFparams[i].split("=")[0], vnFparams[i].split("=")[1]);
+                    }
+                }
+
+                String vnFparamKey = null;
+                Iterator<String> nameItr = bodyParam.keys();
+                while(nameItr.hasNext()) {
+                    vnFparamKey = nameItr.next();
+                    vnfParamMap.put(vnFparamKey, bodyParam.get(vnFparamKey).toString());
+
+                }
+                LOG.warn("method is GET or DEL,and paramsMap = " + vnfParamMap);
+                restParametes.setParamMap(vnfParamMap);
+            }
+        } else {
+            restParametes.setRawData(bodyParam == null ? null : bodyParam.toString());
+        }
+        return getRestRes(methodNames, path, restParametes);
+    }
+
+
+    /**
+     * encapsulate the java reflect exception
+     *
+     * @param methodName
+     *            Restful's method
+     * @param objects
+     *            method param array
+     * @return
+     */
+    private static boolean isAnyNull(Object... objects) {
+        for(int i = 0; i < objects.length; i++) {
+            if(objects[i] == null) {
+                return true;
+            }
+        }
+        return false;
+
+    }
+
+    private static Class<?>[] formArray(Object[] objects) {
+        Class<?>[] vnfClasses = new Class[objects.length];
+        for(int i = 0; i < objects.length; i++) {
+            vnfClasses[i] = objects[i].getClass();
+        }
+        return vnfClasses;
+
+    }
+
+    /**
+     * Helps to invoke methods on Restful.
+     * <br>
+     *
+     * @param methodName
+     * @param objects
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static RestfulResponse getRestRes(String methodName, Object... objects) {
+        Restful rest = RestfulFactory.getRestInstance(RestfulFactory.PROTO_HTTP);
+        try {
+            if(isAnyNull(objects, rest)) {
+                return null;
+            }
+
+            Class<?>[] vnfClasses = formArray(objects);
+
+            if(methodName.startsWith("async")) {
+                vnfClasses[vnfClasses.length - 1] = RestfulAsyncCallback.class;
+            }
+
+            Class<?> rtType = methodName.startsWith("async") ? void.class : RestfulResponse.class;
+            MethodType mt = MethodType.methodType(rtType, vnfClasses);
+            Object reuslt = MethodHandles.lookup().findVirtual(rest.getClass(), methodName, mt).bindTo(rest)
+                    .invokeWithArguments(objects);
+            if(reuslt != null) {
+                return (RestfulResponse)reuslt;
+            }
+            LOG.warn("function=getRestRes, msg: invoke Restful async {} method which return type is Void.", methodName);
+            return null;
+        } catch(ReflectiveOperationException e) {
+            LOG.error("function=getRestRes, msg=error occurs, e={}.", e);
+        } catch(ServiceException e) {
+
+            LOG.error("function=getRestRes, msg=ServiceException occurs, status={}", e.getHttpCode());
+            LOG.error("function=getRestRes, msg=ServiceException occurs, reason={}.", e.getCause().getMessage());
+            LOG.error("function=getRestRes, msg=ServiceException occurs, e={}.", e);
+            RestfulResponse response = new RestfulResponse();
+            response.setStatus(e.getHttpCode());
+            response.setResponseJson(e.getCause().getMessage());
+            return response;
+
+        } catch(Throwable e) { //NOSONAR
+            try {
+                throw (VnfmException)new VnfmException().initCause(e.getCause());
+            } catch(VnfmException e1) {
+                LOG.error("function=getRestRes, msg=VnfmException occurs, e={},e1={}.", e1, e);
+            }
+
+        }
+        return null;
+    }
+
+    /**
+     * Send request to manager.
+     * @param path
+     * @param methodName
+     * @param paraJson
+     * @return
+     */
+    public static JSONObject sendReqToApp(String path, String methodName, JSONObject paraJson) {
+        JSONObject retJson = new JSONObject();
+        retJson.put("retCode", Constant.REST_FAIL);
+        String abPath = null;
+        String vnfmId = null;
+        if(paraJson != null && paraJson.containsKey("vnfmInfo")) {
+            JSONObject vnfmObj = paraJson.getJSONObject("vnfmInfo");
+            vnfmId = vnfmObj.getString("id");
+        } else {
+            abPath = path;
+        }
+        LOG.warn("function=sendReqToApp, msg=url to send to app is: " + abPath);
+
+        RestfulResponse restfulResponse = VNFRestfulUtil.getRestResByDefault(path, methodName, paraJson);
+        if(restfulResponse == null || abPath == null) {
+            LOG.error("function=sendReqToApp, msg=data from app is null");
+            retJson.put("data", "get null result");
+        } else if(restfulResponse.getStatus() == Constant.HTTP_OK) {
+            JSONObject object = JSONObject.fromObject(restfulResponse.getResponseContent());
+            if(!abPath.contains("vnfdmgr/v1")) {
+                LOG.warn("function=sendReqToApp, msg=result from app is: " + object.toString());
+            }
+            if(object.getInt("retCode") == Constant.REST_SUCCESS) {
+                retJson.put("retCode", Constant.REST_SUCCESS);
+                retJson.put("data", withVnfmIdSuffix(vnfmId, object.get("data")));
+                return retJson;
+            } else {
+                retJson.put("retCode", Constant.REST_FAIL);
+                if(object.containsKey("msg")) {
+                    retJson.put("data", object.getString("msg"));
+                    return retJson;
+                } else {
+                    return object;
+                }
+            }
+        } else {
+            LOG.error("function=sendReqToApp, msg=status from app is: " + restfulResponse.getStatus());
+            LOG.error("function=sendReqToApp, msg=result from app is: " + restfulResponse.getResponseContent());
+            retJson.put("data", "send to app get error status: " + restfulResponse.getStatus());
+        }
+        return retJson;
+    }
+
+    /**
+     * append suffix to result with vnfmId
+     *
+     * @param vnfmId
+     * @param dataJson
+     * @return
+     */
+    private static Object withVnfmIdSuffix(String vnfmId, Object dataJson) {
+        Object result = new Object();
+        if(vnfmId == null) {
+            return dataJson;
+        }
+
+        if(dataJson instanceof JSONObject) {
+            JSONObject jsonObject = (JSONObject)dataJson;
+            jsonObject.put("vnfmId", vnfmId);
+            result = jsonObject;
+        } else if(dataJson instanceof JSONArray) {
+            JSONArray dataArray = (JSONArray)dataJson;
+            JSONArray resultArray = new JSONArray();
+
+            for(Object obj : dataArray) {
+                JSONObject jsonObject = JSONObject.fromObject(obj);
+                jsonObject.put("vnfmId", vnfmId);
+                resultArray.add(jsonObject);
+            }
+            result = resultArray;
+        }
+        return result;
+    }
+
+    /**
+     * Make HTTP method calls<br>
+     *
+     * @param paramsMap Map<String, String>
+     * @param params String
+     * @param domainTokens String
+     * @param isNfvoApp Boolean
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params, String domainTokens,
+            boolean isNfvoApp) {
+        String utilUrl = paramsMap.get("url");
+        String utilMethodType = paramsMap.get("methodType");
+        String utilPath = paramsMap.get("path");
+        String authMode = paramsMap.get("authMode");
+
+        RestfulResponse rsp = null;
+        Restful rest = null;
+        String sslOptionFile = "";
+        try {
+            String restClientFile = "restclient.json";
+
+            if(isNfvoApp) {
+                sslOptionFile = "ssl.nfvo.properties";
+            } else {
+                sslOptionFile = "ssl.vcmm.properties";
+            }
+
+            LOG.warn("function=getRemoteResponse,AuthenticationMode=" + authMode);
+
+            rest = HttpRestfulHelp.getRestInstance(sslOptionFile, restClientFile);
+
+            RestfulOptions opt = new RestfulOptions();
+            String[] strs = utilPath.split("(http(s)?://)|:");
+
+            opt.setHost(strs[1]);
+            opt.setPort(Integer.parseInt(strs[2]));
+
+            RestfulParametes restfulParametes = new RestfulParametes();
+            Map<String, String> headerMap = new HashMap<>(3);
+            headerMap.put(Constant.CONTENT_TYPE, Constant.APPLICATION);
+            headerMap.put(Constant.HEADER_AUTH_TOKEN, domainTokens);
+            restfulParametes.setHeaderMap(headerMap);
+            restfulParametes.setRawData(params);
+
+            if(rest != null) {
+                if(TYPE_GET.equalsIgnoreCase(utilMethodType)) {
+                    rsp = rest.get(utilUrl, restfulParametes, opt);
+                } else if(TYPE_POST.equalsIgnoreCase(utilMethodType)) {
+                    rsp = rest.post(utilUrl, restfulParametes, opt);
+                } else if(TYPE_PUT.equalsIgnoreCase(utilMethodType)) {
+                    rsp = rest.put(utilUrl, restfulParametes, opt);
+                } else if(TYPE_DEL.equalsIgnoreCase(utilMethodType)) {
+                    rsp = rest.delete(utilUrl, restfulParametes, opt);
+                }
+            }
+        } catch(ServiceException e) {
+            LOG.error("function=restfulResponse, get restful response catch exception {}", e);
+        }
+        return rsp;
+    }
+
+    /**
+     * Make HTTP method calls
+     * <br>
+     *
+     * @param paramsMap
+     * @param params
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+        if(null == paramsMap){
+            return null;
+        }
+        String url = paramsMap.get("url");
+        String methodType = paramsMap.get("methodType");
+
+        RestfulResponse rsp = null;
+        Restful rest = RestfulFactory.getRestInstance(RestfulFactory.PROTO_HTTP);
+        try {
+
+            RestfulParametes restfulParametes = new RestfulParametes();
+            Map<String, String> headerMap = new HashMap<>(3);
+            headerMap.put(CONTENT_TYPE, APPLICATION);
+            restfulParametes.setHeaderMap(headerMap);
+            restfulParametes.setRawData(params);
+
+            if (rest != null) {
+                if (TYPE_GET.equalsIgnoreCase(methodType)) {
+                    rsp = rest.get(url, restfulParametes);
+                } else if (TYPE_POST.equalsIgnoreCase(methodType)) {
+                    rsp = rest.post(url, restfulParametes);
+                } else if (TYPE_PUT.equalsIgnoreCase(methodType)) {
+                    rsp = rest.put(url, restfulParametes);
+                } else if (TYPE_DEL.equalsIgnoreCase(methodType)) {
+                    rsp = rest.delete(url, restfulParametes);
+                }
+            }
+        } catch (ServiceException e) {
+            LOG.error("function=getRemoteResponse, get restful response catch exception {}", e);
+        }
+        return rsp;
+    }
+
+
+    /**
+     * Helps to make the parameter map.
+     * <br>
+     *
+     * @param url
+     * @param methodType
+     * @param path
+     * @param authMode
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static Map<String, String> generateParamsMap(String url, String methodType, String path, String authMode) {
+        Map<String, String> utilParamsMap = new HashMap<>(6);
+        utilParamsMap.put("url", url);
+        utilParamsMap.put("methodType", methodType);
+        utilParamsMap.put("path", path);
+        utilParamsMap.put("authMode", authMode);
+        return utilParamsMap;
+    }
+
+    /**
+     * Helps to make the parameter map.<br>
+     *
+     * @param url
+     * @param methodType
+     * @param path
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static Map<String, String> generateParamsMap(String url, String methodType, String path) {
+        Map<String, String> paramsMap = new HashMap<>(6);
+        paramsMap.put("url", url);
+        paramsMap.put("methodType", methodType);
+        paramsMap.put("path", path);
+        paramsMap.put("authMode", "Certificate");
+        return paramsMap;
+    }
+
+    /**
+     * Cookup the response
+     * <br>
+     *
+     * @param vnfmInfo
+     * @param vnfmId
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static JSONObject getResultToVnfm(JSONObject vnfmInfo, String vnfmId) {
+        JSONObject retJson = new JSONObject();
+        retJson.put("retCode", Constant.REST_FAIL);
+        if(vnfmInfo == null) {
+            LOG.error("function=getResultToVnfm, msg=data from vnfm is null");
+            retJson.put("data", "get null result");
+            return retJson;
+        }
+
+        if(vnfmInfo.getInt("retCode") == Constant.REST_SUCCESS) {
+            retJson.put("retCode", Constant.REST_SUCCESS);
+            retJson.put("data", withVnfmIdSuffix(vnfmId, vnfmInfo.get("data")));
+            return retJson;
+        } else {
+            retJson.put("retCode", Constant.REST_FAIL);
+            if(vnfmInfo.containsKey("msg")) {
+                retJson.put("data", vnfmInfo.getString("msg"));
+                return retJson;
+            } else {
+                return vnfmInfo;
+            }
+        }
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VnfmRestfulUtil.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VnfmRestfulUtil.java
new file mode 100644 (file)
index 0000000..7f17777
--- /dev/null
@@ -0,0 +1,404 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common.servicetoken;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.baseservice.roa.util.restclient.Restful;
+import org.openo.baseservice.roa.util.restclient.RestfulAsyncCallback;
+import org.openo.baseservice.roa.util.restclient.RestfulFactory;
+import org.openo.baseservice.roa.util.restclient.RestfulOptions;
+import org.openo.baseservice.roa.util.restclient.RestfulParametes;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+/**
+ * VNFM Restful Utility.
+ * .</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 10, 2016
+ */
+public final class VnfmRestfulUtil {
+
+    public static final String TYPE_GET = "get";
+
+    public static final String TYPE_ADD = "add";
+
+    public static final String TYPE_POST = "post";
+
+    public static final String TYPE_PUT = "put";
+
+    public static final String TYPE_DEL = "delete";
+
+    public static final int ERROR_STATUS_CODE = -1;
+
+    private static final Logger LOG = LoggerFactory.getLogger(VnfmRestfulUtil.class);
+
+    private VnfmRestfulUtil() {
+
+    }
+
+    /**
+     * within our module, we support a default method to invoke
+     *
+     * @param path
+     *            rest service url
+     * @param methodNames
+     *            [post, delete, put, get, asyncPost, asyncDelete, asyncPut,
+     *            asyncGet]
+     * @param bodyParam
+     *            rest body msg
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public static RestfulResponse getRestResByDefault(String path, String methodNames, JSONObject bodyParam) {
+        RestfulParametes restParametes = new RestfulParametes();
+        Map<String, String> headerMap = new HashMap<>(2);
+        headerMap.put(Constant.CONTENT_TYPE, Constant.APPLICATION);
+        restParametes.setHeaderMap(headerMap);
+
+        if(Constant.GET.equals(methodNames) || Constant.DELETE.equals(methodNames)) {
+            if(null != bodyParam) {
+                Map<String, String> vnfParamsMap = new HashMap<>(Constant.DEFAULT_COLLECTION_SIZE);
+                if(path.contains("?")) {
+                    String[] vnfUtlList = path.split("\\?");
+                    String[] vnfParams = vnfUtlList[1].split("&");
+                    int paramsSize = vnfParams.length;
+
+                    for(int i = 0; i < paramsSize; i++) {
+                        vnfParamsMap.put(vnfParams[i].split("=")[0], vnfParams[i].split("=")[1]);
+                    }
+                }
+
+                String vnfParamKey = null;
+                Iterator<String> nameItr = bodyParam.keys();
+                while(nameItr.hasNext()) {
+                    vnfParamKey = nameItr.next();
+                    vnfParamsMap.put(vnfParamKey, bodyParam.get(vnfParamKey).toString());
+
+                }
+                LOG.warn("method is GET or DEL,and paramsMap = " + vnfParamsMap);
+                restParametes.setParamMap(vnfParamsMap);
+            }
+        } else {
+            restParametes.setRawData(bodyParam == null ? null : bodyParam.toString());
+        }
+        return getRestRes(methodNames, path, restParametes);
+    }
+
+    /**
+     * encapsulate the java reflect exception
+     *
+     * @param methodName
+     *            Restful's method
+     * @param objects
+     *            method param array
+     * @return
+     */
+    private static boolean isAnyNull(Object... objects) {
+        for(int i = 0; i < objects.length; i++) {
+            if(objects[i] == null) {
+                return true;
+            }
+        }
+        return false;
+
+    }
+
+    private static Class<?>[] formArray(Object[] objects) {
+        Class<?>[] vnfClasses = new Class[objects.length];
+        for(int i = 0; i < objects.length; i++) {
+            vnfClasses[i] = objects[i].getClass();
+        }
+        return vnfClasses;
+
+    }
+
+    /**
+     * Helps to invoke http methods Restful
+     * <br>
+     *
+     * @param methodName String
+     * @param objects String
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static RestfulResponse getRestRes(String methodName, Object... objects) {
+        Restful rest = RestfulFactory.getRestInstance(RestfulFactory.PROTO_HTTP);
+        try {
+            if(isAnyNull(objects, rest)) {
+                return null;
+            }
+
+            Class<?>[] vnfClasses = formArray(objects);
+
+            if(methodName.startsWith("async")) {
+                vnfClasses[vnfClasses.length - 1] = RestfulAsyncCallback.class;
+            }
+
+            Class<?> rtType = methodName.startsWith("async") ? void.class : RestfulResponse.class;
+            MethodType mt = MethodType.methodType(rtType, vnfClasses);
+            Object reuslt = MethodHandles.lookup().findVirtual(rest.getClass(), methodName, mt).bindTo(rest)
+                    .invokeWithArguments(objects);
+            if(reuslt != null) {
+                return (RestfulResponse)reuslt;
+            }
+            LOG.warn("function=getRestRes, msg: invoke Restful async {} method which return type is Void.", methodName);
+            return null;
+        } catch(ReflectiveOperationException e) {
+            LOG.error("function=getRestRes, msg=error occurs, e={}.", e);
+        } catch(ServiceException e) {
+
+            LOG.error("function=getRestRes, msg=ServiceException occurs, status={}", e.getHttpCode());
+            LOG.error("function=getRestRes, msg=ServiceException occurs, reason={}.", e.getCause().getMessage());
+            LOG.error("function=getRestRes, msg=ServiceException occurs, e={}.", e);
+            RestfulResponse response = new RestfulResponse();
+            response.setStatus(e.getHttpCode());
+            response.setResponseJson(e.getCause().getMessage());
+            return response;
+
+        } catch(Throwable e) { //NOSONAR
+            try {
+                throw (VnfmException)new VnfmException().initCause(e.getCause());
+            } catch(VnfmException e1) {
+                LOG.error("function=getRestRes, msg=VnfmException occurs, e={},e1={}.", e1, e);
+            }
+
+        }
+        return null;
+    }
+
+    /**
+     * Helps to send Request to vnfm.
+     * <br>
+     *
+     * @param path String
+     * @param methodName String
+     * @param paraJson JSONObject
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static JSONObject sendReqToApp(String path, String methodName, JSONObject paraJson) {
+        JSONObject retJson = new JSONObject();
+        retJson.put("retCode", Constant.REST_FAIL);
+        String abPath = null;
+        String vnfmId = null;
+        if(paraJson != null && paraJson.containsKey("vnfmInfo")) {
+            JSONObject vnfmObj = paraJson.getJSONObject("vnfmInfo");
+            vnfmId = vnfmObj.getString("id");
+        } else {
+            abPath = path;
+        }
+        LOG.warn("function=sendReqToApp, msg=url to send to app is: " + abPath);
+
+        RestfulResponse restfulResponse = VnfmRestfulUtil.getRestResByDefault(path, methodName, paraJson);
+        if(restfulResponse == null || abPath == null) {
+            LOG.error("function=sendReqToApp, msg=data from app is null");
+            retJson.put("data", "get null result");
+        } else if(restfulResponse.getStatus() == Constant.HTTP_OK) {
+            JSONObject object = JSONObject.fromObject(restfulResponse.getResponseContent());
+            if(!abPath.contains("vnfdmgr/v1")) {
+                LOG.warn("function=sendReqToApp, msg=result from app is: " + object.toString());
+            }
+            if(object.getInt("retCode") == Constant.REST_SUCCESS) {
+                retJson.put("retCode", Constant.REST_SUCCESS);
+                retJson.put("data", withVnfmIdSuffix(vnfmId, object.get("data")));
+                return retJson;
+            } else {
+                retJson.put("retCode", Constant.REST_FAIL);
+                if(object.containsKey("msg")) {
+                    retJson.put("data", object.getString("msg"));
+                    return retJson;
+                } else {
+                    return object;
+                }
+            }
+        } else {
+            LOG.error("function=sendReqToApp, msg=status from app is: " + restfulResponse.getStatus());
+            LOG.error("function=sendReqToApp, msg=result from app is: " + restfulResponse.getResponseContent());
+            retJson.put("data", "send to app get error status: " + restfulResponse.getStatus());
+        }
+        return retJson;
+    }
+
+    /**
+     * append suffix to result with vnfmId
+     *
+     * @param vnfmId
+     * @param dataJson
+     * @return
+     */
+    private static Object withVnfmIdSuffix(String vnfmId, Object dataJson) {
+        Object result = new Object();
+        if(vnfmId == null) {
+            return dataJson;
+        }
+
+        if(dataJson instanceof JSONObject) {
+            JSONObject jsonObject = (JSONObject)dataJson;
+            jsonObject.put("vnfmId", vnfmId);
+            result = jsonObject;
+        } else if(dataJson instanceof JSONArray) {
+            JSONArray dataArray = (JSONArray)dataJson;
+            JSONArray resultArray = new JSONArray();
+
+            for(Object obj : dataArray) {
+                JSONObject jsonObject = JSONObject.fromObject(obj);
+                jsonObject.put("vnfmId", vnfmId);
+                resultArray.add(jsonObject);
+            }
+            result = resultArray;
+        }
+        return result;
+    }
+
+    /**
+     * Make request and get HTTP response
+     * <br>
+     *
+     * @param paramsMap Map<String, String>
+     * @param params String
+     * @param domainTokens String
+     * @param isNfvoApp boolean
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params, String domainTokens,
+            boolean isNfvoApp) {
+        String utilUrl = paramsMap.get("url");
+        String utilMethodType = paramsMap.get("methodType");
+        String utilPath = paramsMap.get("path");
+        String authMode = paramsMap.get("authMode");
+
+        RestfulResponse rsp = null;
+        Restful rest = null;
+        String sslOptionFile = "";
+        try {
+            String restClientFile = "restclient.json";
+
+            if(isNfvoApp) {
+                sslOptionFile = "ssl.nfvo.properties";
+            } else {
+                sslOptionFile = "ssl.vcmm.properties";
+            }
+
+            LOG.warn("function=getRemoteResponse,AuthenticationMode=" + authMode);
+
+            rest = HttpRestfulHelp.getRestInstance(sslOptionFile, restClientFile);
+
+            RestfulOptions opt = new RestfulOptions();
+            String[] strs = utilPath.split("(http(s)?://)|:");
+
+            opt.setHost(strs[1]);
+            opt.setPort(Integer.parseInt(strs[2]));
+
+            RestfulParametes restfulParametes = new RestfulParametes();
+            Map<String, String> headerMap = new HashMap<>(3);
+            headerMap.put(Constant.CONTENT_TYPE, Constant.APPLICATION);
+            headerMap.put(Constant.HEADER_AUTH_TOKEN, domainTokens);
+            restfulParametes.setHeaderMap(headerMap);
+            restfulParametes.setRawData(params);
+
+            if(rest != null) {
+                if(TYPE_GET.equalsIgnoreCase(utilMethodType)) {
+                    rsp = rest.get(utilUrl, restfulParametes, opt);
+                } else if(TYPE_POST.equalsIgnoreCase(utilMethodType)) {
+                    rsp = rest.post(utilUrl, restfulParametes, opt);
+                } else if(TYPE_PUT.equalsIgnoreCase(utilMethodType)) {
+                    rsp = rest.put(utilUrl, restfulParametes, opt);
+                } else if(TYPE_DEL.equalsIgnoreCase(utilMethodType)) {
+                    rsp = rest.delete(utilUrl, restfulParametes, opt);
+                }
+            }
+        } catch(ServiceException e) {
+            LOG.error("function=restfulResponse, get restful response catch exception {}", e);
+        }
+        return rsp;
+    }
+
+    /**
+     * Make request and get HTTP response
+     * <br>
+     *
+     * @param url String
+     * @param methodType String
+     * @param params String
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static RestfulResponse getRemoteResponse(String url, String methodType, String params) {
+        RestfulResponse rsp = null;
+        Restful rest = RestfulFactory.getRestInstance(RestfulFactory.PROTO_HTTP);
+        try {
+
+            RestfulParametes restfulParametes = new RestfulParametes();
+            Map<String, String> headerMap = new HashMap<>(3);
+            headerMap.put(Constant.CONTENT_TYPE, Constant.APPLICATION);
+            restfulParametes.setHeaderMap(headerMap);
+            if(params != null) {
+                restfulParametes.setRawData(params);
+            }
+
+            if(rest != null) {
+                if(TYPE_GET.equalsIgnoreCase(methodType)) {
+                    rsp = rest.get(url, restfulParametes);
+                } else if(TYPE_POST.equalsIgnoreCase(methodType)) {
+                    rsp = rest.post(url, restfulParametes);
+                } else if(TYPE_PUT.equalsIgnoreCase(methodType)) {
+                    rsp = rest.put(url, restfulParametes);
+                } else if(TYPE_DEL.equalsIgnoreCase(methodType)) {
+                    rsp = rest.delete(url, restfulParametes);
+                }
+            }
+        } catch(ServiceException e) {
+            LOG.error("function=getRemoteResponse, get restful response catch exception {}", e);
+        }
+        return rsp;
+    }
+
+    /**
+     * Make Params map<br>
+     *
+     * @param url String
+     * @param methodType String
+     * @param path String
+     * @param authMode String
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static Map<String, String> generateParamsMap(String url, String methodType, String path, String authMode) {
+        Map<String, String> utilParamsMap = new HashMap<>(6);
+        utilParamsMap.put("url", url);
+        utilParamsMap.put("methodType", methodType);
+        utilParamsMap.put("path", path);
+        utilParamsMap.put("authMode", authMode);
+        return utilParamsMap;
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/activator/RoaVnfmService2DriverMgr.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/activator/RoaVnfmService2DriverMgr.java
new file mode 100644 (file)
index 0000000..4b67d2a
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.activator;
+
+import org.openo.nfvo.vnfmadapter.service.api.internalsvc.inf.IVnfmAdapter2DriverMgrService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 23, 2017
+ */
+public class RoaVnfmService2DriverMgr implements DestructionAwareBeanPostProcessor {
+
+    private static final Logger LOG = LoggerFactory.getLogger(RoaVnfmService2DriverMgr.class);
+
+    @Override
+    public Object postProcessAfterInitialization(Object bean, String name) throws BeansException {
+        if(bean instanceof IVnfmAdapter2DriverMgrService) {
+            IVnfmAdapter2DriverMgrService vnfmAdapterSvc = (IVnfmAdapter2DriverMgrService)bean;
+            vnfmAdapterSvc.register();
+            LOG.info("Successfully Registered to Driver Manager!", RoaVnfmService2DriverMgr.class);
+        }
+
+        return bean;
+    }
+
+    @Override
+    public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException {
+        return bean;
+    }
+
+    @Override
+    public void postProcessBeforeDestruction(Object bean, String name) throws BeansException {
+        // post processing
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/activator/RoaVnfmServicePostProcessor.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/activator/RoaVnfmServicePostProcessor.java
new file mode 100644 (file)
index 0000000..b84b42f
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.activator;
+
+import org.openo.nfvo.vnfmadapter.service.api.internalsvc.inf.IVnfmAdapterMgrService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 31, 2016
+ */
+public class RoaVnfmServicePostProcessor implements DestructionAwareBeanPostProcessor {
+
+    private static final Logger LOG = LoggerFactory.getLogger(RoaVnfmServicePostProcessor.class);
+
+    @Override
+    public Object postProcessAfterInitialization(Object bean, String name) throws BeansException {
+        if(bean instanceof IVnfmAdapterMgrService) {
+               IVnfmAdapterMgrService vnfmAdapterSvc = (IVnfmAdapterMgrService)bean;
+               vnfmAdapterSvc.register();
+            LOG.info("Successfully Registered to Microservice BUS!", RoaVnfmServicePostProcessor.class);
+        }
+
+        return bean;
+    }
+
+    @Override
+    public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException {
+        return bean;
+    }
+
+    @Override
+    public void postProcessBeforeDestruction(Object bean, String name) throws BeansException {
+        //post processing
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/AdapterResourceManager.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/AdapterResourceManager.java
new file mode 100644 (file)
index 0000000..8c731ef
--- /dev/null
@@ -0,0 +1,644 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.adapter.impl;
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.HttpStatus;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.baseservice.util.impl.SystemEnvVariablesFactory;
+import org.openo.nfvo.vnfmadapter.common.DownloadCsarManager;
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VNFRestfulUtil;
+import org.openo.nfvo.vnfmadapter.service.adapter.inf.IResourceManager;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.constant.UrlConstant;
+import org.openo.nfvo.vnfmadapter.service.csm.connect.ConnectMgrVnfm;
+import org.openo.nfvo.vnfmadapter.service.csm.connect.HttpRequests;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+
+/**
+ * Resource Manager adapter class.
+ * .</br>
+ *
+ * @author
+ * @version NFVO 0.5 Sep 13, 2016
+ */
+public class AdapterResourceManager implements IResourceManager {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AdapterResourceManager.class);
+
+    @Override
+    public JSONObject uploadVNFPackage(JSONObject vnfpkg, Map<String, String> paramsMap) {
+        JSONObject resultObj = new JSONObject();
+        JSONObject csarTempObj = new JSONObject();
+
+        try {
+            // if upper layer do not provide vnfpackage info,then get the
+            // vnfpackage info from JSON file.
+            if(vnfpkg == null || vnfpkg.isEmpty()) {
+                String vnfPkgInfo = readVfnPkgInfoFromJson();
+                vnfpkg = JSONObject.fromObject(vnfPkgInfo); // NOSONAR
+            }
+        } catch(IOException e) {
+            LOG.error("function=uploadVNFPackage", e);
+        }
+
+        // check if parameters are null.
+        if(paramsMap == null || paramsMap.isEmpty()) {
+            resultObj.put("reason", "csarid and vnfmid are null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+
+        String csarid = paramsMap.get("csarid");
+        String vnfmid = paramsMap.get("vnfmid");
+        String vnfdid = "";
+        String vnfDescriptorId = paramsMap.get("vnfDescriptorId");
+        if(null == csarid || "".equals(csarid)) {
+            resultObj.put("reason", "csarid is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+        if(null == vnfmid || "".equals(vnfmid)) {
+            resultObj.put("reason", "vnfmid is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+
+        // obtain CSAR package info
+        JSONObject csarobj = getVnfmCsarInfo(csarid);
+        String downloadUri = "";
+        if(Integer.valueOf(csarobj.get("retCode").toString()) == Constant.HTTP_OK) {
+            LOG.info("get CSAR info successful.", csarobj.get("retCode"));
+            downloadUri = csarobj.getString("downloadUri");
+        } else {
+            LOG.error("get CSAR info fail.", csarobj.get("retCode"));
+            resultObj.put("reason", csarobj.get("reason").toString());
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+
+        csarTempObj = vnfpkg.getJSONObject("template");
+        String csarfilepath = csarTempObj.getString("csar_file_path");
+        String csarfilename = csarTempObj.getString("csar_file_name");
+
+        // download csar package and save in location.
+        JSONObject downloadObject =
+                downloadCsar(downloadUri, csarfilepath + System.getProperty("file.separator") + csarfilename);
+
+        if(Integer.valueOf(downloadObject.get("retCode").toString()) != Constant.REST_SUCCESS) {
+            LOG.error("download CSAR fail.", downloadObject.get("retCode"));
+            resultObj.put("reason", downloadObject.get("reason").toString());
+            resultObj.put("retCode", downloadObject.get("retCode").toString());
+            return resultObj;
+        }
+        LOG.info("download CSAR successful.", downloadObject.get("retCode"));
+
+        // unzip csar package to location.
+        JSONObject unzipObject =
+                unzipCSAR(csarfilepath + System.getProperty("file.separator") + csarfilename, csarfilepath);
+
+        if(Integer.valueOf(unzipObject.get("retCode").toString()) != Constant.REST_SUCCESS) {
+            LOG.error("unzip CSAR fail.", unzipObject.get("retCode"));
+            resultObj.put("reason", unzipObject.get("reason").toString());
+            resultObj.put("retCode", unzipObject.get("retCode").toString());
+            return resultObj;
+        }
+        LOG.info("unzip CSAR successful.", unzipObject.get("retCode"));
+
+        Map<String, String> vnfmMap = new HashMap<>();
+        vnfmMap.put("url", String.format(UrlConstant.REST_VNFMINFO_GET, vnfmid));
+        vnfmMap.put("methodType", Constant.GET);
+
+        // get VNFM connection info
+        JSONObject vnfmObject = getVnfmConnInfo(vnfmMap);
+        if(Integer.valueOf(vnfmObject.get("retCode").toString()) != Constant.HTTP_OK) {
+            LOG.error("get Vnfm Connection Info fail.", vnfmObject.get("retCode"));
+            resultObj.put("reason", vnfmObject.get("reason").toString());
+            resultObj.put("retCode", vnfmObject.get("retCode").toString());
+            return resultObj;
+        }
+        LOG.info("get Vnfm Connection Info successful.", vnfmObject.get("retCode"));
+
+        String vnfmUrl = vnfmObject.getString("url");
+        String userName = vnfmObject.getString("userName");
+        String password = vnfmObject.getString("password");
+
+        // build VNFM connection and get token
+        ConnectMgrVnfm mgrVcmm = new ConnectMgrVnfm();
+
+        JSONObject connObject = new JSONObject();
+        connObject.put("url", vnfmUrl);
+        connObject.put("userName", userName);
+        connObject.put("password", password);
+        if(Constant.HTTP_OK != mgrVcmm.connect(vnfmObject, Constant.CERTIFICATE)) {
+            LOG.error("get Access Session fail.");
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "connect fail.");
+            return resultObj;
+        }
+        LOG.info("get Access Session successful.");
+        String connToken = mgrVcmm.getAccessSession();
+
+        // get vim_id
+        JSONObject cloudObject = getAllCloud(vnfmUrl, connToken);
+        String vimId = "";
+
+        if(!cloudObject.isEmpty() && cloudObject.get(Constant.RETCODE).equals(HttpStatus.SC_OK)) {
+            LOG.info("get all cloud successful.", cloudObject.get(Constant.RETCODE));
+            vimId = cloudObject.getString("vim_id");
+        } else {
+            LOG.error("get all cloud fail.", cloudObject.get(Constant.RETCODE));
+            return cloudObject;
+        }
+
+        // upload VNF package
+        csarTempObj.put("vim_id", vimId);
+        vnfpkg.put("template", csarTempObj);
+
+        JSONObject uploadPkgObject = upload(vnfpkg, vnfmUrl, connToken);
+        LOG.info("uploadPkgObject:" + uploadPkgObject);
+        if(vnfdid == null || "".equals(vnfdid.trim())) {
+            JSONObject vnfdConf = readVnfdIdInfoFromJson();
+            LOG.info("vnfdConf=" + vnfdConf);
+            if(vnfdConf.containsKey(vnfDescriptorId)) {
+                vnfdid = vnfdConf.getString(vnfDescriptorId);
+            }
+        }
+        LOG.info("set vnfdId=" + vnfdid);
+
+        // get vnfd version
+        String vnfdVersion = "";
+
+        JSONObject vnfdVerObject =
+                getVnfdVersion(vnfmUrl, String.format(UrlConstant.URL_VNFDINFO_GET, vnfdid), connToken);
+        LOG.info("vnfdVerObject:" + vnfdVerObject);
+        if(!vnfdVerObject.isEmpty() && vnfdVerObject.get(Constant.RETCODE).equals(HttpStatus.SC_OK)) {
+            LOG.info("get vnfd version successful.", vnfdVerObject.get(Constant.RETCODE));
+            JSONArray verArr = vnfdVerObject.getJSONArray("templates");
+            JSONObject verTmpObj = verArr.getJSONObject(0);
+
+            vnfdVersion = verTmpObj.getString("vnfdVersion");
+        } else {
+            LOG.error("get vnfd version fail.", vnfdVerObject.get(Constant.RETCODE));
+            return vnfdVerObject;
+        }
+
+        // get vnfd plan info
+        String planName = "";
+        String planId = "";
+
+        JSONObject vnfdPlanInfo = getVNFDPlanInfo(vnfmUrl, vnfdid, connToken);
+        LOG.info("vnfdPlanInfo:" + vnfdPlanInfo);
+        JSONObject inputsObj = new JSONObject();
+        if(!vnfdPlanInfo.isEmpty() && vnfdPlanInfo.get(Constant.RETCODE).equals(HttpStatus.SC_OK)) {
+            LOG.info("get vnfd plan info successful.", vnfdPlanInfo.get(Constant.RETCODE));
+            JSONObject planTmpObj = vnfdPlanInfo.getJSONObject("template");
+            String templateName = planTmpObj.getString("template_name").trim();
+            JSONArray topoTmpObj = planTmpObj.getJSONArray("topology_template");
+
+            JSONObject planObj = topoTmpObj.getJSONObject(0);
+            if("VNFD_vUGW".equals(templateName)) {
+                for(int i = 0; i < topoTmpObj.size(); i++) {
+                    String name = topoTmpObj.getJSONObject(i).getString("plan_name").trim();
+                    if("Normal_E9K".equals(name)) {
+                        planObj = topoTmpObj.getJSONObject(i);
+                    }
+                }
+            }
+
+            planName = planObj.getString("plan_name");
+            planId = planObj.getString("plan_id");
+            if(planObj.containsKey("inputs")) {
+                JSONArray inputs = planObj.getJSONArray("inputs");
+                for(int i = 0; i < inputs.size(); i++) {
+                    JSONObject obj = inputs.getJSONObject(i);
+                    obj.put("value", obj.getString("default"));
+                }
+                inputsObj.put("inputs", inputs);
+                inputsObj.put("External_network", new JSONArray());
+            }
+        } else {
+            LOG.error("get vnfd plan info fail.", vnfdPlanInfo.get(Constant.RETCODE));
+            return vnfdPlanInfo;
+        }
+
+        // return values
+        resultObj.put("retCode", Constant.HTTP_OK);
+        resultObj.put("vnfdId", vnfdid);
+        resultObj.put("vnfdVersion", vnfdVersion);
+        resultObj.put("planName", planName);
+        resultObj.put("planId", planId);
+        resultObj.put("parameters", inputsObj);
+        LOG.info("resultObj:" + resultObj.toString());
+
+        return resultObj;
+    }
+
+    private JSONObject sendRequest(Map<String, String> paramsMap) {
+        JSONObject resultObj = new JSONObject();
+        RestfulResponse rsp = VNFRestfulUtil.getRemoteResponse(paramsMap, "");
+        if(null == rsp) {
+            LOG.error("function=sendRequest,  RestfulResponse is null");
+            resultObj.put("reason", "RestfulResponse is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+        String resultCreate = rsp.getResponseContent();
+
+        if(rsp.getStatus() == Constant.HTTP_OK) {
+            LOG.warn("function=sendRequest, msg= status={}, result={}.", rsp.getStatus(), resultCreate);
+            resultObj = JSONObject.fromObject(resultCreate);
+            resultObj.put("retCode", Constant.HTTP_OK);
+            return resultObj;
+        } else {
+            LOG.error("function=sendRequest, msg=ESR return fail,status={}, result={}.", rsp.getStatus(), resultCreate);
+            resultObj.put("reason", "ESR return fail.");
+        }
+        resultObj.put("retCode", Constant.REST_FAIL);
+        return resultObj;
+    }
+
+    @Override
+    public JSONObject getVnfmCsarInfo(String csarid) {
+        JSONObject resultObj = new JSONObject();
+
+        if(null == csarid || "".equals(csarid)) {
+            resultObj.put("reason", "csarid is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+
+        Map<String, String> paramsMap = new HashMap<String, String>();
+
+        paramsMap.put("url", String.format(UrlConstant.REST_CSARINFO_GET, csarid));
+        paramsMap.put("methodType", Constant.GET);
+
+        return this.sendRequest(paramsMap);
+    }
+
+    @Override
+    public JSONObject downloadCsar(String url, String filePath) {
+        JSONObject resultObj = new JSONObject();
+
+        if(url == null || "".equals(url)) {
+            resultObj.put("reason", "url is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+        if(filePath == null || "".equals(filePath)) {
+            resultObj.put("reason", "downloadUrl filePath is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+
+        String status = DownloadCsarManager.download(url, filePath);
+
+        if(Constant.DOWNLOADCSAR_SUCCESS.equals(status)) {
+            resultObj.put("reason", "download csar file successfully.");
+            resultObj.put("retCode", Constant.REST_SUCCESS);
+        } else {
+            resultObj.put("reason", "download csar file failed.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+        }
+        return resultObj;
+    }
+
+    @Override
+    public JSONObject getAllCloud(String url, String conntoken) {
+        JSONObject resultObj = new JSONObject();
+        JSONArray resArray = new JSONArray();
+
+        if(url == null || url.equals("")) {
+            url = "http://127.0.0.1:31943";
+        }
+
+        // get vim_id
+        HttpMethod httpMethodCloud = null;
+        try {
+            httpMethodCloud =
+                    new HttpRequests.Builder(Constant.CERTIFICATE).setUrl(url.trim(), UrlConstant.URL_ALLCLOUD_NEW_GET)
+                            .addHeader(Constant.HEADER_AUTH_TOKEN, conntoken).setParams("").get().execute();
+
+            int statusCode = httpMethodCloud.getStatusCode();
+
+            String result = httpMethodCloud.getResponseBodyAsString();
+            LOG.info(result);
+            if(statusCode == HttpStatus.SC_OK) {
+                JSONObject vimInfo = JSONObject.fromObject(result);
+                resArray = vimInfo.getJSONArray("vim_info");
+                resultObj = resArray.getJSONObject(0);
+                resultObj.put(Constant.RETCODE, statusCode);
+            } else {
+                LOG.error("uploadVNFPackage get allcloud failed, code:" + statusCode + " re:" + result);
+                resultObj.put(Constant.RETCODE, statusCode);
+                resultObj.put("reason", "get allcloud failed. code:" + statusCode + " re:" + result);
+                return resultObj;
+            }
+        } catch(JSONException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get allcloud JSONException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "get allcloud failed and JSONException." + e.getMessage());
+            return resultObj;
+        } catch(VnfmException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get allcloud VnfmException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "get allcloud failed and VnfmException." + e.getMessage());
+            return resultObj;
+        } catch(IOException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get allcloud IOException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "get allcloud failed and IOException." + e.getMessage());
+            return resultObj;
+        }
+        return resultObj;
+    }
+
+    /**
+     * Upload vnfpackage<br>
+     *
+     * @param vnfpackage
+     * @param vnfmurl
+     * @param conntoken
+     * @return
+     * @since NFVO 0.5
+     */
+    public JSONObject upload(JSONObject vnfpackage, String vnfmurl, String conntoken) {
+        JSONObject resultObj = new JSONObject();
+        HttpMethod httpMethodVnf = null;
+
+        try {
+            httpMethodVnf = new HttpRequests.Builder(Constant.CERTIFICATE)
+                    .setUrl(vnfmurl.trim(), UrlConstant.URL_VNFPACKAGE_POST).setParams(vnfpackage.toString())
+                    .addHeader(Constant.HEADER_AUTH_TOKEN, conntoken).post().execute();
+
+            int statusCodeUp = httpMethodVnf.getStatusCode();
+
+            String resultUp = httpMethodVnf.getResponseBodyAsString();
+
+            if(statusCodeUp == HttpStatus.SC_CREATED || statusCodeUp == HttpStatus.SC_OK) {
+                LOG.info("uploadVNFPackage upload VNF package successful, code:" + statusCodeUp + " re:" + resultUp);
+                resultObj = JSONObject.fromObject(resultUp);
+                resultObj.put(Constant.RETCODE, statusCodeUp);
+            } else {
+                LOG.error("uploadVNFPackage upload VNF package failed, code:" + statusCodeUp + " re:" + resultUp);
+                resultObj.put(Constant.RETCODE, statusCodeUp);
+                resultObj.put("data", "upload VNF package failed, code:" + statusCodeUp + " re:" + resultUp);
+                return resultObj;
+            }
+        } catch(JSONException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage upload VNF package JSONException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "upload VNF package failed and JSONException." + e.getMessage());
+            return resultObj;
+        } catch(VnfmException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage upload VNF package VnfmException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "upload VNF package failed and VnfmException." + e.getMessage());
+            return resultObj;
+        } catch(IOException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage upload VNF package IOException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "upload VNF package failed and IOException." + e.getMessage());
+            return resultObj;
+        }
+        return resultObj;
+    }
+
+    /**
+     * Find vnfd version.<br>
+     *
+     * @param prefixUrl
+     * @param serviceUrl
+     * @return
+     * @since NFVO 0.5
+     */
+    public JSONObject getVnfdVersion(String prefixUrl, String serviceUrl, String conntoken) {
+        JSONObject resultObj = new JSONObject();
+        HttpMethod httpMethodVnfd = null;
+        try {
+            httpMethodVnfd = new HttpRequests.Builder(Constant.CERTIFICATE).setUrl(prefixUrl.trim(), serviceUrl)
+                    .setParams("").addHeader(Constant.HEADER_AUTH_TOKEN, conntoken).get().execute();
+
+            int statusCodeVnfd = httpMethodVnfd.getStatusCode();
+
+            String resultVnfd = httpMethodVnfd.getResponseBodyAsString();
+            LOG.info("getVnfdVersion result:" + resultVnfd);
+            if(statusCodeVnfd == HttpStatus.SC_OK) {
+                resultObj = JSONObject.fromObject(resultVnfd);
+                resultObj.put(Constant.RETCODE, statusCodeVnfd);
+            } else {
+                LOG.error("uploadVNFPackage vnfd version failed, code:" + statusCodeVnfd + " re:" + resultVnfd);
+                resultObj.put(Constant.RETCODE, statusCodeVnfd);
+                resultObj.put("data", "get vnfd version failed, code:" + statusCodeVnfd + " re:" + resultVnfd);
+                return resultObj;
+            }
+        } catch(JSONException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get vnfd version JSONException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "get vnfd version failed and JSONException." + e.getMessage());
+            return resultObj;
+        } catch(VnfmException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get vnfd version VnfmException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "get vnfd version failed and VnfmException." + e.getMessage());
+            return resultObj;
+        } catch(IOException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get vnfd version IOException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "get vnfd version failed and IOException." + e.getMessage());
+            return resultObj;
+        }
+        return resultObj;
+    }
+
+    /**
+     * Find VNFM connection information.<br>
+     *
+     * @param paramsMap
+     * @return
+     * @since NFVO 0.5
+     */
+    public JSONObject getVnfmConnInfo(Map<String, String> paramsMap) {
+        return this.sendRequest(paramsMap);
+    }
+
+    @Override
+    public JSONObject getVNFDPlanInfo(String url, String vnfdid, String conntoken) {
+        JSONObject resultObj = new JSONObject();
+
+        HttpMethod httpMethodPlan = null;
+        try {
+            httpMethodPlan = new HttpRequests.Builder(Constant.CERTIFICATE)
+                    .setUrl(url.trim(), String.format(UrlConstant.URL_VNFDPLANINFO_GET, vnfdid)).setParams("")
+                    .addHeader(Constant.HEADER_AUTH_TOKEN, conntoken).get().execute();
+
+            int statusCode = httpMethodPlan.getStatusCode();
+
+            String result = httpMethodPlan.getResponseBodyAsString();
+            LOG.info("getVNFDPlanInfo result=" + result);
+            if(statusCode == HttpStatus.SC_OK) {
+                resultObj = JSONObject.fromObject(result);
+                resultObj.put(Constant.RETCODE, statusCode);
+            } else {
+                LOG.error("uploadVNFPackage get VNFDPlanInfo failed, code:" + statusCode + " re:" + result);
+                resultObj.put(Constant.RETCODE, statusCode);
+                resultObj.put("reason", "get VNFDPlanInfo failed. code:" + statusCode + " re:" + result);
+                return resultObj;
+            }
+        } catch(JSONException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get VNFDPlanInfo JSONException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "get VNFDPlanInfo failed and JSONException." + e.getMessage());
+            return resultObj;
+        } catch(VnfmException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get VNFDPlanInfo VnfmException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "get VNFDPlanInfo failed and VnfmException." + e.getMessage());
+            return resultObj;
+        } catch(IOException e) {
+            LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get VNFDPlanInfo IOException e={}.", e);
+            resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultObj.put("reason", "get VNFDPlanInfo failed and IOException." + e.getMessage());
+            return resultObj;
+        }
+        return resultObj;
+    }
+
+    /**
+     * Get VNF package information.<br>
+     *
+     * @return
+     * @throws IOException
+     * @since NFVO 0.5
+     */
+    public static String readVfnPkgInfoFromJson() throws IOException {
+        InputStream ins = null;
+        BufferedInputStream bins = null;
+        String fileContent = "";
+
+        String fileName = SystemEnvVariablesFactory.getInstance().getAppRoot() + System.getProperty("file.separator")
+                + "etc" + System.getProperty("file.separator") + "vnfpkginfo" + System.getProperty("file.separator")
+                + Constant.VNFPKGINFO;
+
+        try {
+            ins = new FileInputStream(fileName);
+            bins = new BufferedInputStream(ins);
+
+            byte[] contentByte = new byte[ins.available()];
+            int num = bins.read(contentByte);
+
+            if(num > 0) {
+                fileContent = new String(contentByte);
+            }
+        } catch(FileNotFoundException e) {
+            LOG.error(fileName + "is not found!", e);
+        } finally {
+            if(ins != null) {
+                ins.close();
+            }
+            if(bins != null) {
+                bins.close();
+            }
+        }
+
+        return fileContent;
+    }
+
+    private static JSONObject readVnfdIdInfoFromJson() {
+        JSONObject jsonObject = new JSONObject();
+        InputStream ins = null;
+        BufferedInputStream bins = null;
+        String fileContent = "";
+
+        String fileName = SystemEnvVariablesFactory.getInstance().getAppRoot() + System.getProperty("file.separator")
+                + "etc" + System.getProperty("file.separator") + "vnfpkginfo" + System.getProperty("file.separator")
+                + "vnfd_ids.json";
+
+        try {
+            ins = new FileInputStream(fileName);
+            bins = new BufferedInputStream(ins);
+
+            byte[] contentByte = new byte[ins.available()];
+            int num = bins.read(contentByte);
+
+            if(num > 0) {
+                fileContent = new String(contentByte);
+            }
+            if(fileContent != null) {
+                jsonObject = JSONObject.fromObject(fileContent).getJSONObject("vnfdIds");
+            }
+            if(ins != null) {
+                ins.close();
+            }
+            if(bins != null) {
+                bins.close();
+            }
+        } catch(Exception e) {
+            LOG.error(fileName + " read error!", e);
+        } finally {
+
+        }
+
+        return jsonObject;
+    }
+
+    /*
+     * unzip CSAR packge
+     * @param fileName filePath
+     * @return
+     */
+    public JSONObject unzipCSAR(String fileName, String filePath) {
+        JSONObject resultObj = new JSONObject();
+
+        if(fileName == null || "".equals(fileName)) {
+            resultObj.put("reason", "fileName is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+        if(filePath == null || "".equals(filePath)) {
+            resultObj.put("reason", "unzipCSAR filePath is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+
+        int status = DownloadCsarManager.unzipCSAR(fileName, filePath);
+
+        if(Constant.UNZIP_SUCCESS == status) {
+            resultObj.put("reason", "unzip csar file successfully.");
+            resultObj.put("retCode", Constant.REST_SUCCESS);
+        } else {
+            resultObj.put("reason", "unzip csar file failed.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+        }
+        return resultObj;
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/Driver2MSBManager.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/Driver2MSBManager.java
new file mode 100644 (file)
index 0000000..bd8d3c1
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.adapter.impl;
+
+import java.util.Map;
+
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VNFRestfulUtil;
+import org.openo.nfvo.vnfmadapter.service.adapter.inf.IDriver2MSBManager;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONObject;
+
+/**
+ *
+ * Driver to MSB Manager Class.<br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version     NFVO 0.5  Aug 29, 2016
+ */
+public class Driver2MSBManager implements IDriver2MSBManager {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Driver2MSBManager.class);
+
+    @Override
+    public JSONObject registerDriver(Map<String, String> paramsMap, JSONObject driverInfo) {
+        JSONObject resultObj = new JSONObject();
+
+        RestfulResponse rsp = VNFRestfulUtil.getRemoteResponse(paramsMap, driverInfo.toString());
+        if(null == rsp) {
+            LOG.error("function=registerDriver,  RestfulResponse is null");
+            resultObj.put("reason", "RestfulResponse is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+        String resultCreate = rsp.getResponseContent();
+
+        if(rsp.getStatus() == Constant.HTTP_CREATED) {
+            LOG.warn("function=registerDriver, msg= status={}, result={}.", rsp.getStatus(), resultCreate);
+            resultObj = JSONObject.fromObject(resultCreate);
+            resultObj.put("retCode", Constant.HTTP_CREATED);
+            return resultObj;
+        } else if(rsp.getStatus() == Constant.HTTP_INVALID_PARAMETERS) {
+            LOG.error("function=registerDriver, msg=MSB return fail,invalid parameters,status={}, result={}.",
+                    rsp.getStatus(), resultCreate);
+            resultObj.put("reason", "MSB return fail,invalid parameters.");
+        } else if(rsp.getStatus() == Constant.HTTP_INNERERROR) {
+            LOG.error("function=registerDriver, msg=MSB return fail,internal system error,status={}, result={}.",
+                    rsp.getStatus(), resultCreate);
+            resultObj.put("reason", "MSB return fail,internal system error.");
+        }
+        resultObj.put("retCode", Constant.REST_FAIL);
+        return resultObj;
+    }
+
+    @Override
+    public JSONObject unregisterDriver(Map<String, String> paramsMap) {
+        JSONObject resultObj = new JSONObject();
+
+        RestfulResponse rsp = VNFRestfulUtil.getRemoteResponse(paramsMap, "");
+        if(null == rsp) {
+            LOG.error("function=unregisterDriver,  RestfulResponse is null");
+            resultObj.put("reason", "RestfulResponse is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+        String resultCreate = rsp.getResponseContent();
+
+        if(rsp.getStatus() == Constant.HTTP_NOCONTENT) {
+            LOG.warn("function=unregisterDriver, msg= status={}, result={}.", rsp.getStatus(), resultCreate);
+            resultObj = JSONObject.fromObject(resultCreate);
+            resultObj.put("retCode", Constant.HTTP_NOCONTENT);
+            return resultObj;
+        } else if(rsp.getStatus() == Constant.HTTP_NOTFOUND) {
+            LOG.error(
+                    "function=unregisterDriver, msg=MSB return fail,can't find the service instance.status={}, result={}.",
+                    rsp.getStatus(), resultCreate);
+            resultObj.put("reason", "MSB return fail,can't find the service instance.");
+        } else if(rsp.getStatus() == Constant.HTTP_INVALID_PARAMETERS) {
+            LOG.error("function=unregisterDriver, msg=MSB return fail,invalid parameters,status={}, result={}.",
+                    rsp.getStatus(), resultCreate);
+            resultObj.put("reason", "MSB return fail,invalid parameters.");
+        } else if(rsp.getStatus() == Constant.HTTP_INNERERROR) {
+            LOG.error("function=unregisterDriver, msg=MSB return fail,internal system error,status={}, result={}.",
+                    rsp.getStatus(), resultCreate);
+            resultObj.put("reason", "MSB return fail,internal system error.");
+        }
+        resultObj.put("retCode", Constant.REST_FAIL);
+        return resultObj;
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/VnfmAdapter2DriverManager.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/VnfmAdapter2DriverManager.java
new file mode 100644 (file)
index 0000000..211536f
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.adapter.impl;
+
+import java.util.Map;
+
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VNFRestfulUtil;
+import org.openo.nfvo.vnfmadapter.service.adapter.inf.IVnfmAdapter2DriverManager;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONObject;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 23, 2017
+ */
+public class VnfmAdapter2DriverManager implements IVnfmAdapter2DriverManager {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VnfmAdapter2DriverManager.class);
+
+    @Override
+    public JSONObject registerDriver(Map<String, String> paramsMap, JSONObject driverInfo) {
+        JSONObject resultObj = new JSONObject();
+
+        RestfulResponse rsp = VNFRestfulUtil.getRemoteResponse(paramsMap, driverInfo.toString());
+        if(null == rsp) {
+            LOG.error("function=registerDriver,  RestfulResponse is null");
+            resultObj.put("reason", "RestfulResponse is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+        String resultCreate = rsp.getResponseContent();
+
+        if(rsp.getStatus() == Constant.HTTP_CREATED) {
+            LOG.warn("function=registerDriver, msg= status={}, result={}.", rsp.getStatus(), resultCreate);
+            resultObj.put("retCode", Constant.HTTP_CREATED);
+            return resultObj;
+        } else if(rsp.getStatus() == Constant.HTTP_INVALID_PARAMETERS) {
+            LOG.error("function=registerDriver, msg=DriverManager return fail,invalid parameters,status={}, result={}.",
+                    rsp.getStatus(), resultCreate);
+            resultObj.put("reason", "DriverManager return fail,invalid parameters.");
+        } else if(rsp.getStatus() == Constant.HTTP_INNERERROR) {
+            LOG.error(
+                    "function=registerDriver, msg=DriverManager return fail,internal system error,status={}, result={}.",
+                    rsp.getStatus(), resultCreate);
+            resultObj.put("reason", "DriverManager return fail,internal system error.");
+        }
+        resultObj.put("retCode", Constant.REST_FAIL);
+        return resultObj;
+    }
+
+    @Override
+    public JSONObject unregisterDriver(Map<String, String> paramsMap) {
+        JSONObject resultObj = new JSONObject();
+
+        RestfulResponse rsp = VNFRestfulUtil.getRemoteResponse(paramsMap, "");
+        if(null == rsp) {
+            LOG.error("function=unregisterDriver,  RestfulResponse is null");
+            resultObj.put("reason", "RestfulResponse is null.");
+            resultObj.put("retCode", Constant.REST_FAIL);
+            return resultObj;
+        }
+        String resultCreate = rsp.getResponseContent();
+
+        if(rsp.getStatus() == Constant.HTTP_NOCONTENT) {
+            LOG.warn("function=unregisterDriver, msg= status={}, result={}.", rsp.getStatus(), resultCreate);
+            resultObj = JSONObject.fromObject(resultCreate);
+            resultObj.put("retCode", Constant.HTTP_NOCONTENT);
+            return resultObj;
+        } else if(rsp.getStatus() == Constant.HTTP_NOTFOUND) {
+            LOG.error(
+                    "function=unregisterDriver, msg=DriverManager return fail,can't find the service instance.status={}, result={}.",
+                    rsp.getStatus(), resultCreate);
+            resultObj.put("reason", "DriverManager return fail,can't find the service instance.");
+        } else if(rsp.getStatus() == Constant.HTTP_INVALID_PARAMETERS) {
+            LOG.error(
+                    "function=unregisterDriver, msg=DriverManager return fail,invalid parameters,status={}, result={}.",
+                    rsp.getStatus(), resultCreate);
+            resultObj.put("reason", "DriverManager return fail,invalid parameters.");
+        } else if(rsp.getStatus() == Constant.HTTP_INNERERROR) {
+            LOG.error(
+                    "function=unregisterDriver, msg=DriverManager return fail,internal system error,status={}, result={}.",
+                    rsp.getStatus(), resultCreate);
+            resultObj.put("reason", "DriverManager return fail,internal system error.");
+        }
+        resultObj.put("retCode", Constant.REST_FAIL);
+        return resultObj;
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/inf/IDriver2MSBManager.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/inf/IDriver2MSBManager.java
new file mode 100644 (file)
index 0000000..6d2ff9a
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.adapter.inf;
+
+import java.util.Map;
+
+import net.sf.json.JSONObject;
+
+/**
+ *
+ * IDriver to MSB Manager Class.<br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version     NFVO 0.5  Aug 29, 2016
+ */
+public interface IDriver2MSBManager {
+
+    /**
+     *
+     * Method to Register Driver.<br/>
+     *
+     * @param paramsMap
+     * @param driverInfo
+     * @return
+     * @since  NFVO 0.5
+     */
+    JSONObject registerDriver(Map<String, String> paramsMap, JSONObject driverInfo);
+
+    /**
+     *
+     * Method to Unregister Driver.<br/>
+     *
+     * @param paramsMap
+     * @return
+     * @since  NFVO 0.5
+     */
+    JSONObject unregisterDriver(Map<String, String> paramsMap);
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/inf/IResourceManager.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/inf/IResourceManager.java
new file mode 100644 (file)
index 0000000..8eb7cbf
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.adapter.inf;
+
+import java.util.Map;
+
+import net.sf.json.JSONObject;
+
+/**
+ * Resource Manager interface.</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 13, 2016
+ */
+public interface IResourceManager {
+
+    /**
+     * Get VNFM CSAR information<br>
+     *
+     * @param csarid String
+     * @return
+     * @since  NFVO 0.5
+     */
+    JSONObject getVnfmCsarInfo(String csarid);
+
+    /**
+     * Download CSAR.<br>
+     *
+     * @param url String
+     * @param filePath String
+     * @return
+     * @since  NFVO 0.5
+     */
+    JSONObject downloadCsar(String url,String filePath);
+
+    /**
+     * Get all clouds<br>
+     *
+     * @param url String
+     * @return
+     * @since  NFVO 0.5
+     */
+    JSONObject getAllCloud(String url,String connToken);
+
+
+    /**
+     * get VNFD Plan Info.<br>
+     *
+     * @param url String
+     * @param vnfdid String
+     * @return
+     * @since  NFVO 0.5
+     */
+    JSONObject getVNFDPlanInfo(String url, String vnfdid, String conntoken);
+
+    /**
+     * Upload VNF package.<br>
+     *
+     * @param vnfpkg JSONObject
+     * @param paramsMap Map<String, String>
+     * @return
+     * @since  NFVO 0.5
+     */
+    JSONObject uploadVNFPackage(JSONObject vnfpkg, Map<String, String> paramsMap);
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/inf/IVnfmAdapter2DriverManager.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/adapter/inf/IVnfmAdapter2DriverManager.java
new file mode 100644 (file)
index 0000000..10b4242
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.adapter.inf;
+
+import java.util.Map;
+
+import net.sf.json.JSONObject;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 23, 2017
+ */
+public interface IVnfmAdapter2DriverManager {
+
+    /**
+     * Method to Register Driver.<br/>
+     *
+     * @param paramsMap
+     * @param driverInfo
+     * @return
+     * @since NFVO 0.5
+     */
+    JSONObject registerDriver(Map<String, String> paramsMap, JSONObject driverInfo);
+
+    /**
+     * Method to Unregister Driver.<br/>
+     *
+     * @param paramsMap
+     * @return
+     * @since NFVO 0.5
+     */
+    JSONObject unregisterDriver(Map<String, String> paramsMap);
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/impl/VnfmAdapter2DriverMgrService.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/impl/VnfmAdapter2DriverMgrService.java
new file mode 100644 (file)
index 0000000..42cef38
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.api.internalsvc.impl;
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Executors;
+
+import org.openo.baseservice.util.impl.SystemEnvVariablesFactory;
+import org.openo.nfvo.vnfmadapter.service.adapter.impl.VnfmAdapter2DriverManager;
+import org.openo.nfvo.vnfmadapter.service.adapter.inf.IVnfmAdapter2DriverManager;
+import org.openo.nfvo.vnfmadapter.service.api.internalsvc.inf.IVnfmAdapter2DriverMgrService;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.constant.UrlConstant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONObject;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 23, 2017
+ */
+public class VnfmAdapter2DriverMgrService implements IVnfmAdapter2DriverMgrService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VnfmAdapter2DriverMgrService.class);
+
+    public static final String VNFMADAPTER2DRIVERMGR = "vnfmadapter2drivermgr.json";
+
+    @Override
+    public void register() {
+        // set URL and mothedtype
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", UrlConstant.REST_DRIVERMGR_REGISTER);
+        paramsMap.put("methodType", Constant.POST);
+
+        // get vim adapter info and raise registration
+        try {
+            String adapterInfo = readVnfmAdapterInfoFromJson();
+            if(!"".equals(adapterInfo)) {
+                JSONObject adapterObject = JSONObject.fromObject(adapterInfo);
+                RegisterVnfm2DriverMgrThread vnfmAdapterThread =
+                        new RegisterVnfm2DriverMgrThread(paramsMap, adapterObject);
+                Executors.newSingleThreadExecutor().submit(vnfmAdapterThread);
+            } else {
+                LOG.error("vnfmadapter2drivermgr info is null,please check!");
+            }
+
+        } catch(IOException e) {
+            LOG.error("Failed to read vnfmadapter2drivermgr info! " + e.getMessage(), e);
+        }
+
+    }
+
+    /**
+     * Retrieve VIM driver information.
+     * 
+     * @return
+     * @throws IOException
+     */
+    public static String readVnfmAdapterInfoFromJson() throws IOException {
+        InputStream ins = null;
+        BufferedInputStream bins = null;
+        String fileContent = "";
+
+        String fileName = SystemEnvVariablesFactory.getInstance().getAppRoot() + System.getProperty("file.separator")
+                + "etc" + System.getProperty("file.separator") + "adapterInfo" + System.getProperty("file.separator")
+                + VNFMADAPTER2DRIVERMGR;
+
+        try {
+            ins = new FileInputStream(fileName);
+            bins = new BufferedInputStream(ins);
+
+            byte[] contentByte = new byte[ins.available()];
+            int num = bins.read(contentByte);
+
+            if(num > 0) {
+                fileContent = new String(contentByte);
+            }
+        } catch(FileNotFoundException e) {
+            LOG.error(fileName + "is not found!", e);
+        } finally {
+            if(ins != null) {
+                ins.close();
+            }
+            if(bins != null) {
+                bins.close();
+            }
+        }
+
+        return fileContent;
+    }
+
+    private static class RegisterVnfm2DriverMgrThread implements Runnable {
+
+        // Thread lock Object
+        private final Object lockObject = new Object();
+
+        private IVnfmAdapter2DriverManager adapter2DriverMgr = new VnfmAdapter2DriverManager();
+
+        // url and mothedtype
+        private Map<String, String> paramsMap;
+
+        // driver body
+        private JSONObject adapterInfo;
+
+        public RegisterVnfm2DriverMgrThread(Map<String, String> paramsMap, JSONObject adapterInfo) {
+            this.paramsMap = paramsMap;
+            this.adapterInfo = adapterInfo;
+        }
+
+        @Override
+        public void run() {
+            LOG.info("start register vnfmadapter to Driver Manager", RegisterVnfm2DriverMgrThread.class);
+
+            if(paramsMap == null || adapterInfo == null) {
+                LOG.error("parameter is null,please check!", RegisterVnfm2DriverMgrThread.class);
+                return;
+            }
+
+            // catch Runtime Exception
+            try {
+                sendRequest(paramsMap, adapterInfo);
+            } catch(RuntimeException e) {
+                LOG.error(e.getMessage(), e);
+            }
+
+        }
+
+        private void sendRequest(Map<String, String> paramsMap, JSONObject driverInfo) {
+            JSONObject resultObj = adapter2DriverMgr.registerDriver(paramsMap, driverInfo);
+
+            if(Integer.valueOf(resultObj.get("retCode").toString()) == Constant.HTTP_CREATED) {
+                LOG.info("Vnfmadapter has now Successfully Registered to the Driver Manager!");
+            } else {
+                LOG.error("Vnfmadapter failed to  Register to the Driver Manager! Reason:"
+                        + resultObj.get("reason").toString() + " retCode:" + resultObj.get("retCode").toString());
+
+                // if registration fails,wait one minute and try again
+                try {
+                    synchronized(lockObject) {
+                        lockObject.wait(Constant.REPEAT_REG_TIME);
+                    }
+                } catch(InterruptedException e) {
+                    LOG.error(e.getMessage(), e);
+                }
+
+                sendRequest(this.paramsMap, this.adapterInfo);
+            }
+
+        }
+
+    }
+
+    @Override
+    public void unregister() {
+        // unregister
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/impl/VnfmAdapterMgrService.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/impl/VnfmAdapterMgrService.java
new file mode 100644 (file)
index 0000000..8991218
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.api.internalsvc.impl;
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Executors;
+
+import org.openo.baseservice.util.impl.SystemEnvVariablesFactory;
+import org.openo.nfvo.vnfmadapter.service.adapter.impl.Driver2MSBManager;
+import org.openo.nfvo.vnfmadapter.service.adapter.inf.IDriver2MSBManager;
+import org.openo.nfvo.vnfmadapter.service.api.internalsvc.inf.IVnfmAdapterMgrService;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.constant.UrlConstant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONObject;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 31, 2016
+ */
+public class VnfmAdapterMgrService implements IVnfmAdapterMgrService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VnfmAdapterMgrService.class);
+
+    public static final String VNFMADAPTERINFO = "vnfmadapterinfo.json";
+
+    @Override
+    public void register() {
+        // set BUS URL and mothedtype
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", UrlConstant.REST_MSB_REGISTER);
+        paramsMap.put("methodType", Constant.POST);
+
+        // get vim adapter info and raise registration
+        try {
+            String adapterInfo = readVnfmAdapterInfoFromJson();
+            if(!"".equals(adapterInfo)) {
+                JSONObject adapterObject = JSONObject.fromObject(adapterInfo);
+                RegisterVnfmAdapterThread vnfmAdapterThread = new RegisterVnfmAdapterThread(paramsMap, adapterObject);
+                Executors.newSingleThreadExecutor().submit(vnfmAdapterThread);
+            } else {
+                LOG.error("VnfmAdapter info is null,please check!");
+            }
+
+        } catch(IOException e) {
+            LOG.error("Failed to read VnfmAdapter info! " + e.getMessage(), e);
+        }
+
+    }
+
+    /**
+     * Retrieve VIM driver information.
+     * @return
+     * @throws IOException
+     */
+    public  String readVnfmAdapterInfoFromJson() throws IOException {
+        InputStream ins = null;
+        BufferedInputStream bins = null;
+        String fileContent = "";
+
+        String fileName = SystemEnvVariablesFactory.getInstance().getAppRoot() + System.getProperty("file.separator")
+                + "etc" + System.getProperty("file.separator") + "adapterInfo" + System.getProperty("file.separator")
+                + VNFMADAPTERINFO;
+
+        try {
+            ins = new FileInputStream(fileName);
+            bins = new BufferedInputStream(ins);
+
+            byte[] contentByte = new byte[ins.available()];
+            int num = bins.read(contentByte);
+
+            if(num > 0) {
+                fileContent = new String(contentByte);
+            }
+        } catch(FileNotFoundException e) {
+            LOG.error(fileName + "is not found!", e);
+        } finally {
+            if (ins != null) {
+                ins.close();
+            }
+            if (bins != null) {
+                bins.close();
+            }
+        }
+
+        return fileContent;
+    }
+
+    private static class RegisterVnfmAdapterThread implements Runnable {
+
+        // Thread lock Object
+        private final Object lockObject = new Object();
+
+        private IDriver2MSBManager adapter2MSBMgr = new Driver2MSBManager();
+
+        // url and mothedtype
+        private Map<String, String> paramsMap;
+
+        // driver body
+        private JSONObject adapterInfo;
+
+        public RegisterVnfmAdapterThread(Map<String, String> paramsMap, JSONObject adapterInfo) {
+            this.paramsMap = paramsMap;
+            this.adapterInfo = adapterInfo;
+        }
+
+        @Override
+        public void run() {
+            LOG.info("start register vnfmadapter", RegisterVnfmAdapterThread.class);
+
+            if(paramsMap == null || adapterInfo == null) {
+                LOG.error("parameter is null,please check!", RegisterVnfmAdapterThread.class);
+                return;
+            }
+
+            // catch Runtime Exception
+            try {
+                sendRequest(paramsMap, adapterInfo);
+            } catch(RuntimeException e) {
+                LOG.error(e.getMessage(), e);
+            }
+
+        }
+
+        private void sendRequest(Map<String, String> paramsMap, JSONObject driverInfo) {
+            JSONObject resultObj = adapter2MSBMgr.registerDriver(paramsMap, driverInfo);
+
+            if(Integer.valueOf(resultObj.get("retCode").toString()) == Constant.HTTP_CREATED) {
+                LOG.info("Vnfmadapter has now Successfully Registered to the Microservice BUS!");
+            } else {
+                LOG.error("Vnfmadapter failed to  Register to the Microservice BUS! Reason:"
+                        + resultObj.get("reason").toString() + " retCode:" + resultObj.get("retCode").toString());
+
+                // if registration fails,wait one minute and try again
+                try {
+                    synchronized(lockObject) {
+                        lockObject.wait(Constant.REPEAT_REG_TIME);
+                    }
+                } catch(InterruptedException e) {
+                    LOG.error(e.getMessage(), e);
+                }
+
+                sendRequest(this.paramsMap, this.adapterInfo);
+            }
+
+        }
+
+    }
+
+    @Override
+    public void unregister() {
+        //unregister
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/inf/IVnfmAdapter2DriverMgrService.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/inf/IVnfmAdapter2DriverMgrService.java
new file mode 100644 (file)
index 0000000..7aa7277
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.api.internalsvc.inf;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 23, 2017
+ */
+public interface IVnfmAdapter2DriverMgrService {
+
+    /**
+     * VimAdapter register interface.<br>
+     *
+     * @since NFVO 0.5
+     */
+    void register();
+
+    /**
+     * VimAdapter unregister interface.<br>
+     *
+     * @since NFVO 0.5
+     */
+    void unregister();
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/inf/IVnfmAdapterMgrService.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/api/internalsvc/inf/IVnfmAdapterMgrService.java
new file mode 100644 (file)
index 0000000..c25a2de
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.api.internalsvc.inf;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 31, 2016
+ */
+public interface IVnfmAdapterMgrService {
+
+    /**
+     * VimAdapter register interface.
+     */
+    void register();
+
+    /**
+     * VimAdapter unregister interface.
+     */
+    void unregister();
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/constant/Constant.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/constant/Constant.java
new file mode 100644 (file)
index 0000000..e20375f
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+package org.openo.nfvo.vnfmadapter.service.constant;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Provide constant value
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Sep 3, 2016
+ */
+public class Constant {
+
+    public static final String POST = "post";
+
+    public static final String PUT = "put";
+
+    public static final String DELETE = "delete";
+
+    public static final String GET = "get";
+
+    public static final String ASYNCPOST = "asyncPost";
+
+    public static final String ASYNCGET = "asyncGet";
+
+    public static final String ASYNCPUT = "asyncPut";
+
+    public static final String ASYNCDELETE = "asyncDelete";
+
+    public static final String ENCODEING = "utf-8";
+
+    public static final String COOKIE = "Cookie";
+
+    public static final String ACCESSSESSION = "accessSession";
+
+    public static final String CONTENT_TYPE = "Content-Type";
+
+    public static final String APPLICATION = "application/json";
+
+    public static final String HEADER_SUBJECT_TOKEN = "X-Subject-Token";
+
+    public static final String HEADER_AUTH_TOKEN = "accessSession";
+
+    public static final String DOWNLOADCSAR_SUCCESS = "Success";
+
+    public static final int UNZIP_SUCCESS = 0;
+
+    public static final int UNZIP_FAIL = -1;
+
+    public static final String DOWNLOADCSAR_FAIL = "FAIL";
+
+    public static final int HTTP_OK = 200;
+
+    public static final int HTTP_CREATED = 201;
+
+    public static final int HTTP_ACCEPTED = 202;
+
+    public static final int HTTP_NOCONTENT = 204;
+
+    public static final int HTTP_BAD_REQUEST = 400;
+
+    public static final int HTTP_UNAUTHORIZED = 401;
+
+    public static final int HTTP_NOTFOUND = 404;
+
+    public static final int HTTP_NOT_ACCEPTABLE = 406;
+
+    public static final int HTTP_CONFLICT = 409;
+
+    public static final int HTTP_INVALID_PARAMETERS = 415;
+
+    public static final int HTTP_INNERERROR = 500;
+
+    public static final List<String> AUTHLIST = Collections.unmodifiableList(Arrays.asList(Constant.ANONYMOUS, Constant.CERTIFICATE));
+
+    public static final int INTERNAL_EXCEPTION = 600;
+
+    public static final int REPEAT_REG_TIME = 60 * 1000;
+
+    public static final int MIN_PWD_LENGTH = 6;
+
+    public static final int MAX_PWD_LENGTH = 160;
+
+    public static final int MIN_URL_LENGTH = 7;
+
+    public static final int MAX_VNFM_NAME_LENGTH = 64;
+
+    public static final int MIN_VNFM_NAME_LENGTH = 1;
+
+    public static final int MAX_URL_LENGTH = 256;
+
+    public static final int REST_SUCCESS = 1;
+
+    public static final int DEFAULT_COLLECTION_SIZE = 10;
+
+    public static final int REST_FAIL = -1;
+
+    public static final String ROARAND = "?roarand=%s";
+
+    public static final String ANONYMOUS = "Anonymous";
+
+    public static final String CERTIFICATE = "Certificate";
+
+    public static final String RETCODE = "retCode";
+
+    public static final String STATUS = "status";
+
+    public static final String VNFPKGINFO="vnfpkginfo.json";
+
+    public static final int ERROR_STATUS_CODE = -1;
+    
+    public static final String COLON=":";
+
+    private Constant() {
+        //private constructor
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/constant/ParamConstants.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/constant/ParamConstants.java
new file mode 100644 (file)
index 0000000..5d89787
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.constant;
+
+/**
+ *
+ * @author
+ *
+ * @version NFVO 0.5 Sep 6, 2016
+ */
+public class ParamConstants {
+
+    public static final String GET_TOKENS_V1 = "{\"grantType\": \"password\", \"userName\": \"%s\",\"value\": \"%s\"}";
+
+    public static final String GET_TOKENS_V2 =
+            "{\"auth\":{\"identity\": {\"methods\": [\"password\"],\"password\": {\"user\": {\"name\": \"%s\",\"password\": \"%s\"}}}}}";
+
+    public static final String GET_IAM_TOKENS =
+            "{\"auth\": {\"identity\": {\"methods\": [\"password\"],\"password\": {\"user\": {\"name\": "
+                    + "\"%s\",\"password\": \"%s\",\"domain\": {\"name\": \"%s\"}}}},\"scope\": {\"domain\": {\"name\": \"%s\"}}}}";
+
+    public static final String GET_TOKEN_SUC_RESP =
+            "{\"token\": {\"methods\": [\"password\"],\"expires_at\": \"\",\"user\": {\"id\": \"%s\","
+                    + "\"name\": \"%s\"},\"roa_rand\": \"%s\"}}";
+
+    public static final String GET_TOKEN_FAIL_RESP = "{\"Information\": \"%s\"}";
+
+    public static final String REST_3RD_CONNECTION = "/rest/plat/smapp/v1/oauth/token";
+
+    public static final String REST_3RD_DISCONNECT = "/rest/plat/smapp/v1/sessions?roarand=%s";
+
+    public static final String REST_3RD_HANDSHAKE = "/rest/plat/ssm/v1/sessions/verify";
+
+    public static final String IAM_AUTH = "/v3/auth/tokens";
+
+    public static final String CSM_AUTH_CONNECT = "/v2/auth/tokens";
+
+    public static final String CSM_AUTH_DISCONNECT = "/v2/auth/tokens/%s/%s";
+
+    public static final String CSM_AUTH_HANDSHAKE = "/v2/nfvo/shakehand?roattr=status";
+
+    public static final String VNFMMED = "/rest/vnfmmed/";
+
+    public static final String CONNECTMGR_CONNECT = "/connectmgr/v1/connect";
+
+    public static final String CONNECTMGR_DISCONNECT = "/connectmgr/v1/disconnect";
+
+    public static final String CONNECTMGR_HANDSHAKE = "/connectmgr/v1/handshake";
+
+    public static final String CREATE_VNF_PERF = "/staticsmgr/v1/vnfperformance";
+
+    public static final String VNFMGR_INSTANCE = "/vnfmgr/v1/instances";
+
+
+    public static final String VNFD_FLAVOR = "/vnfdmgr/v1/flavor";
+
+    public static final String UPDATE_RESOURCE = "/rest/v1/resmanage/resuse/updateres";
+
+    public static final String VNF_QUERY = "/resmgr/v1/vnfs";
+
+    public static final String VMS_QUERY = "/resmgr/v1/vms";
+
+    public static final String VNFMGR_VNFKPI = "/staticsmgr/v1/vnfkpi";
+
+    public static final String RES_VNF = "/rest/v1/resmanage/vappvm";
+
+    public static final String NOTIFY_VNF_PERF = "/rest/v1/resmanage/vappvm";
+
+    public static final String PARAM_MODULE = "VnfmDriver";
+
+    public static final String GET_ALL_SOS = "/rest/sodriver/v1/sos";
+
+    public static final String OPERATION_LOG_PATH = "/rest/plat/audit/v1/logs";
+
+    public static final String SYSTEM_LOG_PATH = "/rest/plat/audit/v1/systemlogs";
+
+    public static final String SECURITY_LOG_PATH = "/rest/plat/audit/v1/seculogs";
+
+    public static final String GET_VNFM_VNF = "/rest/v1/resmanage/vapps?vnfmId=%s";
+
+    public static final String GET_RES_NET = "/rest/v1/resmanage/virtualnetworks?id=%s";
+
+    public static final String GET_JOB_STATUS = "/vnfmgr/v1/jobs/%s";
+
+    public static final String VNF_INSTANCE = "/v2/vapps/instances";
+
+    public static final String VNF_INSTANCE_DEL = "/v2/vapps/instances/%s";
+
+    public static final String VNF_INSTANCE_GET = "/v2/vapps/instances/%s";
+
+    public static final String VNF_SCALE = "/v2/vapps/instances/%s/scale";
+
+    public static final String VNF_GET_VMINFO = "/v2/vapps/instances/%s/vm";
+
+
+    public static final String MSB_REGISTER_URL = "/openoapi/microservices/v1/services";
+
+    public static final String MSB_UNREGISTER_URL = "/openoapi/microservices/v1/services/hw-vnfm";
+
+    public static final String ESR_GET_VNFM_URL = "/openoapi/extsys/v1/vnfms/%s";
+
+    public static final String ESR_GET_VNFMS_URL = "/openoapi/extsys/v1/vnfms";
+
+    public static final String GRANT_RES_URL = "/openoapi/resmgr/v1/resource/grant";
+
+    private ParamConstants() {
+        // private contstructor
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/constant/UrlConstant.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/constant/UrlConstant.java
new file mode 100644 (file)
index 0000000..1062127
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.constant;
+
+/**
+ * URL constant
+ * 
+ * @author
+ * @version NFVO 0.5 Sep 6, 2016
+ */
+public class UrlConstant {
+
+    public static final String REST_MSB_REGISTER = "/openoapi/microservices/v1/services";
+
+    public static final String REST_DRIVERMGR_REGISTER = "/openoapi/drivermgr/v1/drivers";
+
+    public static final String REST_CSARINFO_GET = "/openoapi/catalog/v1/csars/%s";
+
+    public static final String REST_VNFMINFO_GET = "/openoapi/extsys/v1/vnfms/%s";
+
+    public static final String URL_ALLCLOUD_GET = "/rest/vnfm/vnfmvim/v2/computeservice/getAllCloud";
+
+    public static final String URL_ALLCLOUD_NEW_GET = "/v2/vnfm/vims";
+
+    public static final String URL_VNFPACKAGE_POST = "/v2/vapps/templates";
+
+    public static final String URL_VNFDINFO_GET = "/v2/vapps/templates/%s";
+
+    public static final String URL_VNFDPLANINFO_GET = "/v2/vapps/templates/%s/plans";
+
+    public static final String PORT_COMMON = "31943";
+
+    public static final String PORT_UPLOADVNFPKG = "30001";
+
+    private UrlConstant() {
+        // Constructor
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/api/ConnectInfo.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/api/ConnectInfo.java
new file mode 100644 (file)
index 0000000..5c59c01
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+package org.openo.nfvo.vnfmadapter.service.csm.api;
+
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+
+/**
+ * Connection Information
+ * .</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 14, 2016
+ */
+public class ConnectInfo {
+
+    private String url;
+
+    private String userName;
+
+    private String userPwd;
+
+    private String authenticateMode;
+
+    /**
+     *
+     * Constructor<br>
+     *
+     * @param url
+     * @since  NFVO 0.5
+     */
+    public ConnectInfo(String url) {
+        this.url = url == null ? "" : url;
+        this.authenticateMode = Constant.ANONYMOUS;
+    }
+
+    /**
+     *
+     * Constructor<br>
+     *
+     * @param url
+     * @param userName
+     * @param userPwd
+     * @param authenticateMode
+     * @since  NFVO 0.5
+     */
+    public ConnectInfo(String url, String userName, String userPwd, String authenticateMode) {
+        this.url = url == null ? "" : url;
+        this.userName = userName == null ? "" : userName;
+        this.userPwd = userPwd == null ? "" : userPwd;
+        this.authenticateMode = authenticateMode == null ? "" : authenticateMode;
+    }
+
+    public String getUrl() {
+        return this.url;
+    }
+
+    public void setUrl(String vnfUrl) {
+        this.url = vnfUrl;
+    }
+
+    public String getUserName() {
+        return this.userName;
+    }
+
+    public void setUserName(String vnfUserName) {
+        this.userName = vnfUserName;
+    }
+
+    public String getUserPwd() {
+        return this.userPwd;
+    }
+
+    public void setUserPwd(String vnfUserPwd) {
+        this.userPwd = vnfUserPwd;
+    }
+
+    public String getAuthenticateMode() {
+        return this.authenticateMode;
+    }
+
+    public void setAuthenticateMode(String vnfAuthenticateMode) {
+        this.authenticateMode = vnfAuthenticateMode;
+    }
+
+    @Override
+    public String toString() {
+        return "ConnectInfo [AuthenticateMode: " + authenticateMode + ",url=" + url + ", userName=" + userName + ']';
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((url == null) ? 0 : url.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if(this == obj) {
+            return true;
+        }
+        if(obj == null) {
+            return false;
+        }
+
+        if(!(obj instanceof ConnectInfo)) {
+            return false;
+        }
+
+        if(getClass() != obj.getClass()) {
+            return false;
+        }
+        ConnectInfo other = (ConnectInfo)obj;
+        if(url == null) {
+            if(other.url != null) {
+                return false;
+            }
+        } else if(!url.equals(other.url)) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/AbstractSslContext.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/AbstractSslContext.java
new file mode 100644 (file)
index 0000000..09f0d2c
--- /dev/null
@@ -0,0 +1,182 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.connect;
+
+import net.sf.json.JSONObject;
+import org.apache.http.conn.ssl.SSLContextBuilder;
+import org.openo.baseservice.util.impl.SystemEnvVariablesFactory;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpRequest;
+
+import java.io.*;
+import java.security.*;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.*;
+
+/**
+ * SSL context
+ * .</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 14, 2016
+ */
+public class AbstractSslContext {
+    private static final Logger LOG = LoggerFactory.getLogger(AbstractSslContext.class);
+    protected AbstractSslContext(){
+        //constructor
+    }
+
+    private static SSLContext getSSLContext() throws NoSuchAlgorithmException {
+        return SSLContext.getInstance("TLSv1.2");
+    }
+
+    protected static SSLContext getAnonymousSSLContext() throws GeneralSecurityException {
+        SSLContext sslContext = getSSLContext();
+        sslContext.init(null, new TrustManager[] {new TrustAnyTrustManager()}, new SecureRandom());
+        return sslContext;
+    }
+    protected static SSLContext getCertificateSSLContext() throws GeneralSecurityException {
+        SSLContext sslContext = getSSLContext();
+        JSONObject   sslConf = null;
+        try {
+             sslConf = readSSLConfToJson();
+        } catch (Exception e) {
+            LOG.error("readSSLConfToJson error",e);
+        }
+        sslContext.init(createKeyManager(sslConf), createTrustManager(sslConf), new SecureRandom());
+        return sslContext;
+    }
+
+    protected  static KeyManager[] createKeyManager(JSONObject sslConf) {
+        KeyManager[] kms = null;
+        try {
+            String CERT_STORE="etc/conf/server.p12";
+            String CERT_STORE_PASSWORD="Changeme_123";
+            String KEY_STORE_TYPE = "PKCS12";
+            if(sslConf != null){
+                CERT_STORE = sslConf.getString("keyStore");
+                CERT_STORE_PASSWORD = sslConf.getString("keyStorePass");
+                KEY_STORE_TYPE = sslConf.getString("keyStoreType");
+            }
+            // load jks file
+            FileInputStream f_certStore=new FileInputStream(CERT_STORE);
+            KeyStore ks = KeyStore.getInstance(KEY_STORE_TYPE);
+            ks.load(f_certStore, CERT_STORE_PASSWORD.toCharArray());
+            f_certStore.close();
+
+            // init and create
+            String alg= KeyManagerFactory.getDefaultAlgorithm();
+            KeyManagerFactory kmFact = KeyManagerFactory.getInstance(alg);
+            kmFact.init(ks, CERT_STORE_PASSWORD.toCharArray());
+
+            kms = kmFact.getKeyManagers();
+        }  catch (Exception e) {
+           LOG.error("create KeyManager fail!",e);
+        }
+        return kms;
+    }
+    protected  static TrustManager[] createTrustManager(JSONObject sslConf){
+        TrustManager[] tms = null;
+        try {
+
+        String TRUST_STORE="etc/conf/trust.jks";
+        String TRUST_STORE_PASSWORD="Changeme_123";
+        String TRUST_STORE_TYPE = "jks";
+        if(sslConf != null){
+            TRUST_STORE = sslConf.getString("trustStore");
+            TRUST_STORE_PASSWORD    = sslConf.getString("trustStorePass");
+            TRUST_STORE_TYPE    = sslConf.getString("trustStoreType");
+        }
+        FileInputStream f_trustStore=new FileInputStream(TRUST_STORE);
+        KeyStore ks = KeyStore.getInstance(TRUST_STORE_TYPE);
+        ks.load(f_trustStore, TRUST_STORE_PASSWORD.toCharArray());
+        f_trustStore.close();
+
+        String alg=TrustManagerFactory.getDefaultAlgorithm();
+        TrustManagerFactory tmFact=TrustManagerFactory.getInstance(alg);
+        tmFact.init(ks);
+        tms=tmFact.getTrustManagers();
+
+        } catch (Exception e){
+            LOG.error("create TrustManager fail!",e);
+        }
+        return  tms;
+    }
+
+    /**readSSLConfToJson
+     * @return
+     * @throws IOException
+     * @since NFVO 0.5
+     */
+    public static JSONObject readSSLConfToJson() throws IOException {
+        JSONObject  sslJson= null;
+        InputStream ins = null;
+        BufferedInputStream bins = null;
+        String fileContent = "";
+
+        String fileName = SystemEnvVariablesFactory.getInstance().getAppRoot() + System.getProperty("file.separator")
+                + "etc" + System.getProperty("file.separator") + "conf" + System.getProperty("file.separator")
+                + "sslconf.json";
+
+        try {
+            ins = new FileInputStream(fileName);
+            bins = new BufferedInputStream(ins);
+
+            byte[] contentByte = new byte[ins.available()];
+            int num = bins.read(contentByte);
+
+            if(num > 0) {
+                fileContent = new String(contentByte);
+            }
+            sslJson = JSONObject.fromObject(fileContent);
+        } catch(FileNotFoundException e) {
+            LOG.error(fileName + "is not found!", e);
+        } catch (Exception e){
+            LOG.error("read sslconf file fail.please check if the 'sslconf.json' is exist.");
+        }finally {
+            if(ins != null) {
+                ins.close();
+            }
+            if(bins != null) {
+                bins.close();
+            }
+        }
+
+        return sslJson;
+    }
+    private static class TrustAnyTrustManager implements X509TrustManager {
+
+        @Override
+        public X509Certificate[] getAcceptedIssuers() {
+            return new X509Certificate[] {};
+        }
+
+        @Override
+        public void checkServerTrusted(X509Certificate[] certs, String authType) {
+            //NOSONAR
+        }
+
+        @Override
+        public void checkClientTrusted(X509Certificate[] certs, String authType) {
+            //NOSONAR
+        }
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/ConnectMgrVnfm.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/ConnectMgrVnfm.java
new file mode 100644 (file)
index 0000000..8775a3d
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.connect;
+
+import java.io.IOException;
+
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.HttpStatus;
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.constant.ParamConstants;
+import org.openo.nfvo.vnfmadapter.service.csm.api.ConnectInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+
+/**
+ * VNFM connection manager
+ * .</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 14, 2016
+ */
+public class ConnectMgrVnfm {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ConnectMgrVnfm.class);
+
+    private String accessSession;
+
+    private String roaRand;
+
+    public String getAccessSession() {
+        return accessSession;
+    }
+
+    public void setAccessSession(String accessSession) {
+        this.accessSession = accessSession;
+    }
+
+    public String getRoaRand() {
+        return roaRand;
+    }
+
+    public void setRoaRand(String roaRand) {
+        this.roaRand = roaRand;
+    }
+
+
+    /**
+     * Make connection
+     * <br>
+     *
+     * @param vnfmObj
+     * @return
+     * @since  NFVO 0.5
+     */
+    public int connect(JSONObject vnfmObj,String authModel) {
+        LOG.info("function=connect, msg=enter connect function.");
+
+        ConnectInfo info = new ConnectInfo(vnfmObj.getString("url"), vnfmObj.getString("userName"),
+                vnfmObj.getString("password"), authModel);
+        HttpMethod httpMethod = null;
+        int statusCode = Constant.INTERNAL_EXCEPTION;
+
+        try {
+            httpMethod = new HttpRequests.Builder(info.getAuthenticateMode())
+                    .setUrl(info.getUrl(), ParamConstants.CSM_AUTH_CONNECT)
+                    .setParams(String.format(ParamConstants.GET_TOKENS_V2, info.getUserName(), info.getUserPwd()))
+                    .post().execute();
+            statusCode = httpMethod.getStatusCode();
+
+            String result = httpMethod.getResponseBodyAsString();
+            LOG.info("connect result:"+result);
+            if(statusCode == HttpStatus.SC_CREATED) {
+                JSONObject accessObj = JSONObject.fromObject(result);
+                JSONObject tokenObj = accessObj.getJSONObject("token");
+                Header header = httpMethod.getResponseHeader("accessSession");
+                setAccessSession(header.getValue());
+                setRoaRand(tokenObj.getString("roa_rand"));
+                statusCode = HttpStatus.SC_OK;
+            } else {
+                LOG.error("connect fail, code:" + statusCode + " re:" + result);
+            }
+
+        } catch(JSONException e) {
+            LOG.error("function=connect, msg=connect JSONException e={}.", e);
+        } catch(VnfmException e) {
+            LOG.error("function=connect, msg=connect VnfmException e={}.", e);
+        } catch(IOException e) {
+            LOG.error("function=connect, msg=connect IOException e={}.", e);
+        } finally {
+            clearCSMPwd(info);
+            if(httpMethod != null) {
+                httpMethod.releaseConnection();
+            }
+        }
+        return statusCode;
+
+    }
+    /**
+     * Make connection
+     * <br>
+     *
+     * @param vnfmObj
+     * @return
+     * @since  NFVO 0.5
+     */
+    public int connect(JSONObject vnfmObj) {
+        LOG.info("function=connect, msg=enter connect function.");
+
+        ConnectInfo info = new ConnectInfo(vnfmObj.getString("url"), vnfmObj.getString("userName"),
+                vnfmObj.getString("password"), Constant.ANONYMOUS);
+        HttpMethod httpMethod = null;
+        int statusCode = Constant.INTERNAL_EXCEPTION;
+
+        try {
+            httpMethod = new HttpRequests.Builder(info.getAuthenticateMode())
+                    .setUrl(info.getUrl(), ParamConstants.CSM_AUTH_CONNECT)
+                    .setParams(String.format(ParamConstants.GET_TOKENS_V2, info.getUserName(), info.getUserPwd()))
+                    .post().execute();
+            statusCode = httpMethod.getStatusCode();
+
+            String result = httpMethod.getResponseBodyAsString();
+
+            if(statusCode == HttpStatus.SC_CREATED) {
+                JSONObject accessObj = JSONObject.fromObject(result);
+                JSONObject tokenObj = accessObj.getJSONObject("token");
+                Header header = httpMethod.getResponseHeader("accessSession");
+                setAccessSession(header.getValue());
+                setRoaRand(tokenObj.getString("roa_rand"));
+                statusCode = HttpStatus.SC_OK;
+            } else {
+                LOG.error("connect fail, code:" + statusCode + " re:" + result);
+            }
+
+        } catch(JSONException e) {
+            LOG.error("function=connect, msg=connect JSONException e={}.", e);
+        } catch(VnfmException e) {
+            LOG.error("function=connect, msg=connect VnfmException e={}.", e);
+        } catch(IOException e) {
+            LOG.error("function=connect, msg=connect IOException e={}.", e);
+        } finally {
+            clearCSMPwd(info);
+            if(httpMethod != null) {
+                httpMethod.releaseConnection();
+            }
+        }
+        return statusCode;
+
+    }
+
+    private void clearCSMPwd(ConnectInfo connectInfo) {
+        if(null != connectInfo) {
+            connectInfo.setUserPwd("");
+        }
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/HttpRequests.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/HttpRequests.java
new file mode 100644 (file)
index 0000000..07f3f6b
--- /dev/null
@@ -0,0 +1,375 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.connect;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.net.ssl.SSLHandshakeException;
+
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
+import org.apache.commons.httpclient.methods.DeleteMethod;
+import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.PutMethod;
+import org.apache.commons.httpclient.methods.StringRequestEntity;
+import org.apache.commons.httpclient.protocol.Protocol;
+import org.apache.commons.lang.StringUtils;
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpRequest;
+
+/**
+ * HTTP Request class.</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 14, 2016
+ */
+public final class HttpRequests {
+
+    private static final Logger LOG = LoggerFactory.getLogger(HttpRequest.class);
+
+    private static MultiThreadedHttpConnectionManager httpClientMgr;
+
+    private static final int PORT = 31943;
+
+    private HttpRequests() {
+        // constructor
+    }
+
+    static {
+        httpClientMgr = new MultiThreadedHttpConnectionManager();
+        httpClientMgr.getParams().setStaleCheckingEnabled(true);
+        httpClientMgr.getParams().setMaxTotalConnections(20);
+        httpClientMgr.getParams().setDefaultMaxConnectionsPerHost(100);
+    }
+
+    /**
+     * Request builder.</br>
+     *
+     * @author
+     * @version     NFVO 0.5  Sep 14, 2016
+     */
+    public static class Builder {
+
+        private final List<Header> headers = new ArrayList<>(10);
+
+        private String paramsJson;
+
+        private HttpClient client;
+
+        private HttpMethod httpMethod;
+
+        private String encoding;
+
+        private String url;
+
+        private String authenticateMode;
+
+        /**
+         *
+         * Constructor<br>
+         *
+         * @param authenticateMode
+         * @since  NFVO 0.5
+         */
+        public Builder(String authenticateMode) {
+            this.authenticateMode = authenticateMode;
+            client = new HttpClient(httpClientMgr);
+            client.getHttpConnectionManager().getParams().setConnectionTimeout(30000);
+            client.getHttpConnectionManager().getParams().setSoTimeout(30000);
+            encoding = Constant.ENCODEING;
+        }
+
+        /**
+         * Add header
+         * <br>
+         *
+         * @param name
+         * @param value
+         * @return
+         * @since  NFVO 0.5
+         */
+        public Builder addHeader(String name, String value) {
+            headers.add(new Header(name, value));
+            return this;
+        }
+
+        /**
+         * Add headers
+         * <br>
+         *
+         * @param header
+         * @param headers
+         * @return
+         * @since  NFVO 0.5
+         */
+        public Builder addHeaders(Header header, Header... headers) {
+            if(header != null) {
+                this.headers.add(header);
+            }
+            if(headers != null && headers.length > 0) {
+                for(Header h : headers) {
+                    this.headers.add(h);
+                }
+            }
+            return this;
+        }
+
+        /**
+         * Add headers
+         * <br>
+         *
+         * @param headers
+         * @return
+         * @since  NFVO 0.5
+         */
+        public Builder addHeaders(List<Header> headers) {
+            if(headers != null && !headers.isEmpty()) {
+                this.headers.addAll(headers);
+            }
+            return this;
+        }
+
+        /**
+         * Update URL
+         * <br>
+         *
+         * @param url
+         * @param path
+         * @return
+         * @throws VnfmException
+         * @since  NFVO 0.5
+         */
+        public Builder setUrl(String url, String path) throws VnfmException {
+            if(StringUtils.isEmpty(url)) {
+                throw new VnfmException("com.huawei.nfvo.vcmmadapter.fusionsphere.check.httprequest.url");
+            }
+
+            this.url = url + path;
+
+            LOG.info("setUrl: url =" + url);
+
+            Protocol.registerProtocol("https",
+                    new Protocol("https", SslProtocolSocketFactory.getInstance().get(authenticateMode), PORT));
+
+            return this;
+        }
+
+        /**
+         * Update URL
+         * <br>
+         *
+         * @param url
+         * @param path
+         * @param defPort
+         * @return
+         * @throws VnfmException
+         * @since  NFVO 0.5
+         */
+        public Builder setUrl(String url, String path, int defPort) throws VnfmException {
+            if(StringUtils.isEmpty(url)) {
+                throw new VnfmException("com.huawei.nfvo.vcmmadapter.fusionsphere.check.httprequest.url");
+            }
+
+            this.url = url + path;
+
+            LOG.info("setUrl: url =" + url);
+
+            Protocol.registerProtocol("https",
+                    new Protocol("https", SslProtocolSocketFactory.getInstance().get(authenticateMode), defPort));
+
+            return this;
+        }
+
+        /**
+         * HTTP POST
+         * <br>
+         *
+         * @return
+         * @since  NFVO 0.5
+         */
+        public Builder post() {
+            this.httpMethod = new PostMethod(url);
+            return this;
+        }
+
+        /**
+         * HTTP GET
+         * <br>
+         *
+         * @return
+         * @since  NFVO 0.5
+         */
+        public Builder get() {
+            this.httpMethod = new GetMethod(url);
+            return this;
+        }
+
+        /**
+         * HTTP PUT
+         * <br>
+         *
+         * @return
+         * @since  NFVO 0.5
+         */
+        public Builder put() {
+            this.httpMethod = new PutMethod(url);
+            return this;
+        }
+
+        /**
+         * HTTP DELETE
+         * <br>
+         *
+         * @return
+         * @since  NFVO 0.5
+         */
+        public Builder delete() {
+            this.httpMethod = new DeleteMethod(url);
+            return this;
+        }
+
+        /**
+         * Update Params
+         * <br>
+         *
+         * @param json
+         * @return
+         * @since  NFVO 0.5
+         */
+        public Builder setParams(String json) {
+            this.paramsJson = json;
+            return this;
+        }
+
+        /**
+         * Set the encoding
+         * <br>
+         *
+         * @param encode
+         * @return
+         * @since  NFVO 0.5
+         */
+        public Builder setEncoding(String encode) {
+            this.encoding = encode;
+            return this;
+        }
+
+        /**
+         * Make HTTP request
+         * <br>
+         *
+         * @return
+         * @since  NFVO 0.5
+         */
+        public String request() {
+            String result = null;
+            try {
+                result = executeMethod().getResponseBodyAsString();
+            } catch(SSLHandshakeException e) {
+                LOG.error(String.format("function=request, msg=http request url: %s, SSLHandshake Fail : ", url), e);
+                try {
+                    LOG.error("function=request, msg=SSLHandshake Fail, start refresh certificate ...");
+                    SslProtocolSocketFactory socketFactory = SslProtocolSocketFactory.getInstance();
+                    socketFactory.refresh(authenticateMode);
+                    Protocol.registerProtocol("https",
+                            new Protocol("https", SslProtocolSocketFactory.getInstance().get(authenticateMode), PORT));
+                    LOG.error("function=request, msg=SSLHandshake Fail, certificate refresh successful .");
+
+                    result = executeMethod().getResponseBodyAsString();
+                } catch(IOException ioe) {
+                    LOG.error(String.format("function=request, msg=http request url: %s, error: ", url), ioe);
+                } catch(VnfmException ose) {
+                    LOG.error(String.format("function=request, msg=http request url: %s, error: ", url), ose);
+                }
+            } catch(IOException | VnfmException e) {
+                LOG.error(String.format("function=request, msg=http request url: %s, error: ", url), e);
+            } finally {
+                httpMethod.releaseConnection();
+            }
+            return result;
+        }
+
+        /**
+         * Execute the HTTP method
+         * <br>
+         *
+         * @return
+         * @throws VnfmException
+         * @throws IOException
+         * @since  NFVO 0.5
+         */
+        public HttpMethod execute() throws VnfmException, IOException {
+            try {
+                executeMethod();
+            } catch(SSLHandshakeException e) {
+                LOG.error(String.format("function=execute, msg=http request url: %s, SSLHandshake Fail : ", url), e);
+                LOG.error("function=execute, SSLHandshake Fail, start refresh certificate ...");
+                SslProtocolSocketFactory socketFactory = SslProtocolSocketFactory.getInstance();
+                socketFactory.refresh(authenticateMode);
+                Protocol.registerProtocol("https",
+                        new Protocol("https", SslProtocolSocketFactory.getInstance().get(authenticateMode), PORT));
+                LOG.error("function=execute, SSLHandshake Fail, certificate refresh successful .");
+
+                executeMethod();
+            }
+            return httpMethod;
+        }
+
+        private HttpMethod executeMethod() throws VnfmException, IOException {
+            if(httpMethod == null) {
+                httpMethod = new GetMethod(url);
+            }
+
+            handleParams();
+
+            client.executeMethod(httpMethod);
+
+            return httpMethod;
+        }
+
+        private void handleParams() throws UnsupportedEncodingException {
+            if(paramsJson != null && !paramsJson.isEmpty()) {
+                StringRequestEntity stringRequestEntity =
+                        new StringRequestEntity(paramsJson, "application/json", encoding);
+                String contentLengthString = String.valueOf(stringRequestEntity.getContentLength());
+
+                if(httpMethod instanceof PostMethod || httpMethod instanceof PutMethod) {
+                    ((EntityEnclosingMethod)httpMethod).setRequestEntity(stringRequestEntity);
+                    ((EntityEnclosingMethod)httpMethod).addRequestHeader("Content-Length", contentLengthString);
+                } else {
+                    httpMethod.setQueryString(paramsJson);
+                }
+                addHeader("Content-Type", String.format("application/json;charset=%s", encoding));
+            }
+
+            for(Header header : headers) {
+                httpMethod.addRequestHeader(header);
+            }
+        }
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslAnonymousSocket.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslAnonymousSocket.java
new file mode 100644 (file)
index 0000000..09ec841
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.connect;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.security.GeneralSecurityException;
+
+import javax.net.ssl.SSLSocketFactory;
+
+import org.apache.commons.httpclient.ConnectTimeoutException;
+import org.apache.commons.httpclient.params.HttpConnectionParams;
+import org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory;
+import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Create socket with Anonymous
+ */
+public class SslAnonymousSocket extends AbstractSslContext implements SecureProtocolSocketFactory {
+
+    private static final Logger LOG = LoggerFactory.getLogger(SslAnonymousSocket.class);
+
+    private SSLSocketFactory sslSocketFactory = null;
+
+    /**
+     * Initialize
+     * <br>
+     *
+     * @throws VnfmException
+     * @since  NFVO 0.5
+     */
+    public void init() throws VnfmException {
+        try {
+            sslSocketFactory = getAnonymousSSLContext().getSocketFactory();
+        } catch(GeneralSecurityException e) {
+            LOG.error("function=init, get Anonymous SSLContext exception, exceptioninfo", e);
+            throw (VnfmException)new VnfmException().initCause(e);
+        }
+    }
+
+    @Override
+    public Socket createSocket(String host, int port) throws IOException {
+        return sslSocketFactory.createSocket(host, port);
+    }
+
+    @Override
+    public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort) throws IOException {
+        return sslSocketFactory.createSocket(host, port, clientHost, clientPort);
+    }
+
+    @Override
+    public Socket createSocket(String host, int port, InetAddress localAddress, int localPort,
+            HttpConnectionParams params) throws IOException, ConnectTimeoutException {
+        if(params == null) {
+            throw new IOException("Illegal socket parameters!");
+        } else {
+            int timeout = params.getConnectionTimeout();
+
+            if(timeout == 0) {
+                return createSocket(host, port, localAddress, localPort);
+            } else {
+                return ControllerThreadSocketFactory.createSocket(this, host, port, localAddress, localPort, timeout);
+            }
+        }
+    }
+
+    @Override
+    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException {
+        return sslSocketFactory.createSocket(socket, host, port, autoClose);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslCertificateSocket.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslCertificateSocket.java
new file mode 100644 (file)
index 0000000..9eca6e2
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+package org.openo.nfvo.vnfmadapter.service.csm.connect;
+
+import org.apache.commons.httpclient.ConnectTimeoutException;
+import org.apache.commons.httpclient.params.HttpConnectionParams;
+import org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory;
+import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.SSLSocketFactory;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.security.GeneralSecurityException;
+
+/**
+ * Created by QuanZhong on 2017/3/6.
+ */
+public class SslCertificateSocket extends AbstractSslContext implements SecureProtocolSocketFactory {
+
+    private static final Logger LOG = LoggerFactory.getLogger(SslAnonymousSocket.class);
+
+    private SSLSocketFactory sslSocketFactory = null;
+
+    /**
+     * Initialize
+     * <br>
+     *
+     * @throws VnfmException
+     * @since  NFVO 0.5
+     */
+    public void init() throws VnfmException {
+        try {
+            sslSocketFactory = getCertificateSSLContext().getSocketFactory();
+        } catch(GeneralSecurityException e) {
+            LOG.error("function=init, get Anonymous SSLContext exception, exceptioninfo", e);
+            throw (VnfmException)new VnfmException().initCause(e);
+        }
+    }
+
+    @Override
+    public Socket createSocket(String host, int port) throws IOException {
+        return sslSocketFactory.createSocket(host, port);
+    }
+
+    @Override
+    public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort) throws IOException {
+        return sslSocketFactory.createSocket(host, port, clientHost, clientPort);
+    }
+
+    @Override
+    public Socket createSocket(String host, int port, InetAddress localAddress, int localPort,
+                               HttpConnectionParams params) throws IOException, ConnectTimeoutException {
+        if(params == null) {
+            throw new IOException("Illegal socket parameters!");
+        } else {
+            int timeout = params.getConnectionTimeout();
+
+            if(timeout == 0) {
+                return createSocket(host, port, localAddress, localPort);
+            } else {
+                return ControllerThreadSocketFactory.createSocket(this, host, port, localAddress, localPort, timeout);
+            }
+        }
+    }
+
+    @Override
+    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException {
+        return sslSocketFactory.createSocket(socket, host, port, autoClose);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslProtocolSocketFactory.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslProtocolSocketFactory.java
new file mode 100644 (file)
index 0000000..d14d939
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.connect;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * SSL Socket Factory.
+ * .</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 14, 2016
+ */
+public class SslProtocolSocketFactory {
+
+    private static final Logger LOG = LoggerFactory.getLogger(SslProtocolSocketFactory.class);
+
+    private static final Map<String, ProtocolSocketFactory> SOCKMAP =
+            new ConcurrentHashMap<String, ProtocolSocketFactory>(2);
+
+    private static SslProtocolSocketFactory singleinstance = null;
+
+    /**
+     * Generate instance of SslProtocolSocketFactory
+     * <br>
+     *
+     * @return
+     * @since  NFVO 0.5
+     */
+    public static synchronized SslProtocolSocketFactory getInstance() {
+        if(singleinstance == null) {
+            singleinstance = new SslProtocolSocketFactory();
+        }
+        return singleinstance;
+    }
+
+    /**
+     *
+     * <br>
+     *
+     * @param authenticateMode
+     * @return
+     * @throws VnfmException
+     * @since  NFVO 0.5
+     */
+    public synchronized ProtocolSocketFactory get(String authenticateMode) throws VnfmException {
+        if(SOCKMAP.get(authenticateMode) == null) {
+            if(Constant.ANONYMOUS.equals(authenticateMode)) {
+                SslAnonymousSocket anonymous = new SslAnonymousSocket();
+                anonymous.init();
+                SOCKMAP.put(Constant.ANONYMOUS, anonymous);
+            }else if (Constant.CERTIFICATE.equals(authenticateMode)){
+                SslCertificateSocket certificateSocket = new SslCertificateSocket();
+                certificateSocket.init();
+                SOCKMAP.put(Constant.CERTIFICATE, certificateSocket);
+            } else {
+                LOG.error("funtion=get, msg=ProtocolSocketFactory Unknown AuthenticateMode={}", authenticateMode);
+                throw new VnfmException(String.format("Illegal Auth mode", authenticateMode));
+            }
+        }
+
+        return SOCKMAP.get(authenticateMode);
+    }
+
+    /**
+     * Refresh local socket map
+     * <br>
+     *
+     * @param autherMode
+     * @throws VnfmException
+     * @since  NFVO 0.5
+     */
+    public synchronized void refresh(String autherMode) throws VnfmException {
+        if(Constant.ANONYMOUS.equals(autherMode)) {
+            SslAnonymousSocket anonymous = new SslAnonymousSocket();
+            anonymous.init();
+            SOCKMAP.put(Constant.ANONYMOUS, anonymous);
+        }
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/inf/InterfaceConnectMgr.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/inf/InterfaceConnectMgr.java
new file mode 100644 (file)
index 0000000..f2a2c5e
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.inf;
+
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+
+import net.sf.json.JSONObject;
+/**
+ * Provide interface for connecting
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version     NFVO 0.5  Aug 25, 2016
+ */
+@FunctionalInterface
+public interface InterfaceConnectMgr {
+
+    /**
+     * Provide interface for connecting
+     * <br/>
+     *
+     * @param obj
+     * @return
+     * @throws VnfmException
+     * @since  NFVO 0.5
+     */
+    int connect(JSONObject obj) throws VnfmException;
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/inf/InterfaceVnfMgr.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/inf/InterfaceVnfMgr.java
new file mode 100644 (file)
index 0000000..8a1cb0b
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.inf;
+
+import net.sf.json.JSONObject;
+
+/**
+ * Provide interfaces for instantiate or terminate VNF.
+ * <br/>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 24, 2016
+ */
+public interface InterfaceVnfMgr {
+
+    /**
+     * Provide interface for scale VNF.
+     * @param vnfObject
+     * @param vnfmObject
+     * @param vnfmId
+     * @param vnfInstanceId
+     * @return
+     */
+    public JSONObject scaleVnf(JSONObject vnfObject, JSONObject vnfmObject, String vnfmId, String vnfInstanceId);
+    /**
+     * Provide interface for instantiate VNF.
+     * <br/>
+     *
+     * @param subJsonObject
+     * @param vnfmObjcet
+     * @return
+     * @since NFVO 0.5
+     */
+    JSONObject createVnf(JSONObject subJsonObject, JSONObject vnfmObjcet);
+
+    /**
+     * Provide interface for terminate VNF
+     * <br/>
+     *
+     * @param vnfmObject
+     * @param vnfId
+     * @param vnfObject
+     * @return
+     * @since NFVO 0.5
+     */
+    JSONObject removeVnf(JSONObject vnfmObject, String vnfId, JSONObject vnfObject);
+
+    /**
+     * Provide interface for get VNF info
+     * <br/>
+     *
+     * @param vnfmObject
+     * @param vnfId
+     * @return
+     * @since NFVO 0.5
+     */
+    JSONObject getVnf(JSONObject vnfmObject, String vnfId);
+
+    /**
+     * Retrieve job
+     * <br>
+     *
+     * @param vnfmObject
+     * @param jobId
+     * @return
+     * @since  NFVO 0.5
+     */
+    JSONObject getJob(JSONObject vnfmObject, String jobId);
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/vnf/VnfMgrVnfm.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/csm/vnf/VnfMgrVnfm.java
new file mode 100644 (file)
index 0000000..dea8c0b
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.vnf;
+
+import net.sf.json.JSONArray;
+import org.openo.nfvo.vnfmadapter.common.ResultRequestUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.constant.ParamConstants;
+import org.openo.nfvo.vnfmadapter.service.csm.inf.InterfaceVnfMgr;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+
+import javax.print.attribute.standard.ReferenceUriSchemesSupported;
+
+/**
+ * create or terminate VNF to M
+ * <br/>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 24, 2016
+ */
+public class VnfMgrVnfm implements InterfaceVnfMgr {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VnfMgrVnfm.class);
+
+    @Override
+    public JSONObject scaleVnf(JSONObject vnfObject, JSONObject vnfmObject, String vnfmId, String vnfInstanceId) {
+        LOG.warn("function=scaleVnf, msg=enter to scale a vnf");
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        String path = String.format(ParamConstants.VNF_SCALE, vnfInstanceId);
+
+        int scaleType = getScaleType(vnfObject.getString("type"));
+        //build request json object
+        JSONObject paramJson = new JSONObject();
+        JSONObject scaleInfo = new JSONObject();
+        JSONArray vduList = new JSONArray();
+        JSONObject vdu = new JSONObject();
+        vdu.put("vdu_type",this.getVduType(vnfmObject,vnfInstanceId));//TODO:set vdu_type
+        vdu.put("h_steps",vnfObject.get("numberOfSteps"));
+        vduList.add(vdu);
+        scaleInfo.put("vnf_id",vnfInstanceId);
+        scaleInfo.put("scale_type",0);
+        scaleInfo.put("scale_action",scaleType);
+        scaleInfo.put("vdu_list",vduList);
+        if(scaleType == 0){//scale_in
+            JSONArray vmList = new JSONArray();
+            try {
+                JSONObject additionalParam = vnfObject.getJSONObject("additionalParam");
+                vmList = additionalParam.getJSONArray("vm_list");
+            }catch (JSONException e) {
+              LOG.error("the param 'additionalParam' or 'vm_list' not found,please check it",e);
+            }
+            scaleInfo.put("vm_list",vmList);
+        }
+        paramJson.put("scale_info",scaleInfo);
+        JSONObject queryResult = ResultRequestUtil.call(vnfmObject, path, Constant.PUT, paramJson.toString(),Constant.CERTIFICATE);
+        LOG.info("SCALE execute result:"+queryResult.toString());
+        try {
+            int statusCode = queryResult.getInt(Constant.RETCODE);
+
+            if(statusCode == Constant.HTTP_CREATED || statusCode == Constant.HTTP_OK) {
+                restJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
+                JSONObject resultObj = new JSONObject();
+                resultObj.put("jobId", vnfInstanceId + "_" + Constant.PUT);
+                restJson.put("data", resultObj);
+            } else {
+                LOG.error("function=scaleVnf, msg=send create vnf msg to csm get wrong status: " + statusCode);
+            }
+
+        } catch(JSONException e) {
+            LOG.error("function=scaleVnf, msg=parse scale vnf return data occoured JSONException, e={}.", e);
+        }
+
+        return restJson;
+    }
+
+
+    private String getVduType(JSONObject vnfmObject, String vnfInstanceId){
+        String vduType = "";
+        try {
+            JSONObject queryResult = ResultRequestUtil.call(vnfmObject, String.format(ParamConstants.VNF_GET_VMINFO, vnfInstanceId), Constant.GET, null,Constant.CERTIFICATE);
+            LOG.info("getVduType result="+queryResult);
+            vduType = queryResult.getJSONObject("data").getJSONArray("vms").getJSONObject(0).getString("vdu_type");
+        } catch (Exception e) {
+            LOG.error("get vdu_type failed.",e);
+        }
+        LOG.info("vdu_type="+vduType);
+        return vduType;
+    }
+    private int getScaleType(String type){
+        if("SCALE_OUT".equalsIgnoreCase(type)){
+            return 1;
+        }else if("SCALE_IN".equalsIgnoreCase(type)){
+            return 0;
+        }
+        return -1;
+    }
+    @Override
+    public JSONObject createVnf(JSONObject subJsonObject, JSONObject vnfmObject) {
+        LOG.info("function=createVnf, msg=enter to create a vnf");
+        LOG.info("createVnf csm request body :"+subJsonObject);
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        String path = ParamConstants.VNF_INSTANCE + Constant.ROARAND;
+
+        JSONObject queryResult = ResultRequestUtil.call(vnfmObject, path, Constant.POST, subJsonObject.toString(),Constant.CERTIFICATE);
+        LOG.info("createVnf csm response content:"+queryResult);
+        try {
+            int statusCode = queryResult.getInt(Constant.RETCODE);
+
+            if(statusCode == Constant.HTTP_CREATED) {
+                restJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
+                JSONObject appInfo = JSONObject.fromObject(queryResult.getString("data")).getJSONObject("app_info");
+                JSONObject resultObj = new JSONObject();
+                resultObj.put("vnfInstanceId", appInfo.getString("id"));
+                resultObj.put("jobId", appInfo.getString("id") + "_" + Constant.POST);
+                restJson.put("data", resultObj);
+            } else {
+                LOG.error("function=createVnf, msg=send create vnf msg to csm get wrong status: " + statusCode);
+            }
+
+        } catch(JSONException e) {
+            LOG.error("function=createVnf, msg=parse create vnf return data occoured JSONException, e={}.", e);
+        }
+
+        return restJson;
+    }
+
+    @Override
+    public JSONObject removeVnf(JSONObject vnfmObject, String vnfId, JSONObject vnfObject) {
+        LOG.warn("function=removeVnf, msg=enter to remove a vnf: {}", vnfId);
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+
+        JSONObject queryResult = ResultRequestUtil.call(vnfmObject,
+                String.format(ParamConstants.VNF_INSTANCE_DEL, vnfId) + Constant.ROARAND, Constant.DELETE, null,Constant.CERTIFICATE);
+
+        int statusCode = queryResult.getInt(Constant.RETCODE);
+
+        if(statusCode == Constant.HTTP_NOCONTENT) {
+            restJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
+            JSONObject resultObj = new JSONObject();
+            resultObj.put("jobId", vnfId + "_" + Constant.DELETE);
+            restJson.put("data", resultObj);
+        } else {
+            LOG.error("function=removeVnf, msg=send remove vnf msg to csm get wrong status: {}", statusCode);
+        }
+
+        return restJson;
+    }
+
+    @Override
+    public JSONObject getVnf(JSONObject vnfmObject, String vnfId) {
+        LOG.warn("function=getVnf, msg=enter to get a vnf: {}", vnfId);
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+
+        JSONObject queryResult = ResultRequestUtil.call(vnfmObject,
+                String.format(ParamConstants.VNF_INSTANCE_GET, vnfId) + Constant.ROARAND + "&type=status", Constant.GET,
+                null,Constant.CERTIFICATE);
+
+        int statusCode = queryResult.getInt("retCode");
+
+        if(statusCode == Constant.HTTP_OK || statusCode == Constant.HTTP_CREATED) {
+            if(null == (queryResult.get("data"))) {
+                LOG.warn("function=getVnf, msg=query is null {}", queryResult.get("data"));
+                return restJson;
+            }
+            restJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
+            restJson.put("data", JSONObject.fromObject(queryResult.getString("data")).getJSONArray("basic"));
+        } else {
+            LOG.error("function=getVnf, msg=send get vnf msg to csm get wrong status: {}", statusCode);
+        }
+
+        return restJson;
+    }
+
+    @Override
+    public JSONObject getJob(JSONObject vnfmObject, String jobId) {
+        LOG.warn("function=getJob, msg=enter to get a job: {}", jobId);
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+
+        String vnfId = jobId.split("_")[0];
+        JSONObject queryResult = ResultRequestUtil.call(vnfmObject,
+                String.format(ParamConstants.VNF_INSTANCE_GET, vnfId) + Constant.ROARAND + "&type=status", Constant.GET,
+                null,Constant.CERTIFICATE);
+
+        int statusCode = queryResult.getInt("retCode");
+
+        if(statusCode == Constant.HTTP_OK || statusCode == Constant.HTTP_CREATED) {
+
+            if((queryResult.get("data")) == null) {
+                LOG.warn("function=getJob, msg=query is null {}", queryResult.get("data"));
+                return restJson;
+            }
+            restJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
+            restJson.put("data", JSONObject.fromObject(queryResult.getString("data")).getJSONArray("basic"));
+        } else {
+            LOG.error("function=getJob, msg=send get vnf msg to csm get wrong status: {}", statusCode);
+        }
+
+        return restJson;
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/dao/impl/VnfmDaoImpl.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/dao/impl/VnfmDaoImpl.java
new file mode 100644 (file)
index 0000000..c104bd1
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.dao.impl;
+
+import java.util.List;
+
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.service.dao.inf.AbstractDao;
+import org.openo.nfvo.vnfmadapter.service.dao.inf.VnfmDao;
+import org.openo.nfvo.vnfmadapter.service.entity.Vnfm;
+import org.openo.nfvo.vnfmadapter.service.mapper.VnfmMapper;
+
+/**
+ * VNFM DAO
+ * .</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 14, 2016
+ */
+public class VnfmDaoImpl extends AbstractDao implements VnfmDao {
+
+    @Override
+    public int insertVnfm(Vnfm vnfm) throws ServiceException {
+        return getMapperManager(VnfmMapper.class).insertVnfm(vnfm);
+    }
+
+    @Override
+    public int deleteVnfm(String vnfmDn) throws ServiceException {
+        return getMapperManager(VnfmMapper.class).deleteVnfm(vnfmDn);
+    }
+
+    @Override
+    public int updateVnfm(Vnfm vnfm) throws ServiceException {
+        return getMapperManager(VnfmMapper.class).updateVnfm(vnfm);
+    }
+
+    @Override
+    public List<Vnfm> indexVnfms(int pageSize, int pageNo) throws ServiceException {
+        VnfmMapper vnfmMapper = getMapperManager(VnfmMapper.class);
+        int offset = (pageNo - 1) * pageSize;
+        return vnfmMapper.indexVnfms(offset, pageSize);
+    }
+
+    @Override
+    public Vnfm getVnfmById(String id) {
+        return getMapperManager(VnfmMapper.class).getVnfmById(id);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/dao/inf/AbstractDao.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/dao/inf/AbstractDao.java
new file mode 100644 (file)
index 0000000..592c3d5
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.dao.inf;
+
+import org.apache.ibatis.session.SqlSession;
+
+/**
+ * database abstract class to get the MapperManager.
+ */
+public class AbstractDao {
+
+    private SqlSession session;
+
+    protected AbstractDao() {
+        //Constructor
+    }
+
+    public SqlSession getSession() {
+        return session;
+    }
+
+    public void setSession(SqlSession session) {
+        this.session = session;
+    }
+
+    /**
+     * get Mybatis Mapper.
+     *
+     * @param type : The class of the instance
+     * @param <T> : The type of the instance
+     * @return Mapper : The instance
+     */
+    public <T> T getMapperManager(Class<T> type) {
+        return (T)getSession().getMapper(type);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/dao/inf/VnfmDao.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/dao/inf/VnfmDao.java
new file mode 100644 (file)
index 0000000..8fc4431
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.dao.inf;
+
+import java.util.List;
+
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.service.entity.Vnfm;
+
+/**
+ * VNFM DAO
+ * .</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 14, 2016
+ */
+public interface VnfmDao {
+
+    /**
+     * Add VNFM
+     * <br>
+     *
+     * @param vnfm
+     * @return
+     * @throws ServiceException
+     * @since  NFVO 0.5
+     */
+    int insertVnfm(Vnfm vnfm) throws ServiceException;
+
+    /**
+     * Delete VNFM
+     * <br>
+     *
+     * @param vnfmDn
+     * @return
+     * @throws ServiceException
+     * @since  NFVO 0.5
+     */
+    int deleteVnfm(String vnfmDn) throws ServiceException;
+
+    /**
+     * Update VNFM
+     * <br>
+     *
+     * @param vnfm
+     * @return
+     * @throws ServiceException
+     * @since  NFVO 0.5
+     */
+    int updateVnfm(Vnfm vnfm) throws ServiceException;
+
+    /**
+     * Index VNFM
+     * <br>
+     *
+     * @param pageSize
+     * @param pageNo
+     * @return
+     * @throws ServiceException
+     * @since  NFVO 0.5
+     */
+    List<Vnfm> indexVnfms(int pageSize, int pageNo) throws ServiceException;
+
+    /**
+     * Get VNFM by id.
+     * <br>
+     *
+     * @param id
+     * @return
+     * @since  NFVO 0.5
+     */
+    Vnfm getVnfmById(String id);
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/entity/Vnfm.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/entity/Vnfm.java
new file mode 100644 (file)
index 0000000..dec1724
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * Provide database class
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Sep 3, 2016
+ */
+public class Vnfm {
+
+    private String id;
+
+    private String version;
+
+    private String vnfdId;
+
+    private String vnfPackageId;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getVnfdId() {
+        return vnfdId;
+    }
+
+    public void setVnfdId(String vnfdId) {
+        this.vnfdId = vnfdId;
+    }
+
+    public String getVnfPackageId() {
+        return vnfPackageId;
+    }
+
+    public void setVnfPackageId(String vnfPackageId) {
+        this.vnfPackageId = vnfPackageId;
+    }
+
+    @Override
+    public String toString() {
+        return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((id == null) ? 0 : id.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if(this == obj) {
+            return true;
+        }
+        if(obj == null) {
+            return false;
+        }
+        if(!(obj instanceof Vnfm)) {
+            return false;
+        }
+        if(getClass() != obj.getClass()) {
+            return false;
+        }
+        Vnfm other = (Vnfm)obj;
+        if(id == null) {
+            if(other.id != null) {
+                return false;
+            }
+        } else if(!id.equals(other.id)) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/mapper/VnfmMapper.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/mapper/VnfmMapper.java
new file mode 100644 (file)
index 0000000..6331762
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.openo.nfvo.vnfmadapter.service.entity.Vnfm;
+
+/**
+ * VNFM mapper.</br>
+ *
+ * @author
+ * @version     NFVO 0.5  Sep 14, 2016
+ */
+public interface VnfmMapper {
+
+    /**
+     * Add VNFM
+     * <br>
+     *
+     * @param vnfm Vnfm
+     * @return
+     * @since  NFVO 0.5
+     */
+    int insertVnfm(Vnfm vnfm);
+
+    /**
+     * Update VNFM
+     * <br>
+     *
+     * @param vnfm Vnfm
+     * @return
+     * @since  NFVO 0.5
+     */
+    int updateVnfm(Vnfm vnfm);
+
+    /**
+     * Delete VNFM
+     * <br>
+     *
+     * @param vnfmDn
+     * @return
+     * @since  NFVO 0.5
+     */
+    int deleteVnfm(String vnfmDn);
+
+    /**
+     * Index VNFM
+     * <br>
+     *
+     * @param offset
+     * @param pageSize
+     * @return
+     * @since  NFVO 0.5
+     */
+    List<Vnfm> indexVnfms(@Param("offset") int offset, @Param("pageSize") int pageSize);
+
+    /**
+     * Get VNFM counts.
+     * <br>
+     *
+     * @return
+     * @since  NFVO 0.5
+     */
+    int getCountVnfms();
+
+    /**
+     * Get VNFM by id
+     * <br>
+     *
+     * @param id
+     * @return
+     * @since  NFVO 0.5
+     */
+    Vnfm getVnfmById(String id);
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/AuthMgr.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/AuthMgr.java
new file mode 100644 (file)
index 0000000..1793755
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.process;
+
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+
+/**
+ * Provide function for authInfo.
+ * <br/>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 24, 2016
+ */
+public class AuthMgr {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AuthMgr.class);
+
+    /**
+     * Provide function for add authInfo.
+     * <br/>
+     *
+     * @param params
+     * @return
+     * @since NFVO 0.5
+     */
+    public JSONObject authToken(JSONObject params) {
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        try {
+            String userName = params.getString("userName");
+
+            restJson = getStatusResult(userName);
+        } catch(JSONException e) {
+            LOG.error("function=login, msg=Params error occurs, e={}.", e);
+            restJson.put("data", "JSONException");
+            return restJson;
+        }
+        return restJson;
+    }
+
+    private JSONObject getStatusResult(String userName) {
+        JSONObject restJson = new JSONObject();
+        JSONObject authResult = new JSONObject();
+        JSONObject addInfo = new JSONObject();
+        authResult.put("accessSession", "1234");
+        authResult.put("roaRand", "RoaRand");
+        authResult.put("expires", 1800);
+        addInfo.put("expires", 10);
+        addInfo.put("passwdStatus", "expiring");
+        authResult.put("additionalInfo", addInfo);
+        restJson.put("retCode", Constant.REST_SUCCESS);
+        restJson.put("data", authResult);
+        return restJson;
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/RegisterMgr.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/RegisterMgr.java
new file mode 100644 (file)
index 0000000..7da24c0
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.process;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.RegisterConfigInfo;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VnfmRestfulUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.ParamConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONObject;
+
+/**
+ * Provide function for register or unregister service to Bus.
+ * <br/>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 24, 2016
+ */
+public class RegisterMgr {
+
+    private static final Logger LOG = LoggerFactory.getLogger(RegisterMgr.class);
+
+    /**
+     * Register service to the Bus
+     * <br/>
+     *
+     * @since NFVO 0.5
+     */
+    public void register() {
+        RestfulResponse rsp = VnfmRestfulUtil.getRemoteResponse(ParamConstants.MSB_REGISTER_URL,
+                VnfmRestfulUtil.TYPE_POST, getRegsiterBody());
+
+        LOG.error("funtion=register, status={}", rsp.getStatus());
+    }
+
+    /**
+     * UnRegister service to the Bus
+     * <br/>
+     *
+     * @since NFVO 0.5
+     */
+    public void unRegister() {
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", ParamConstants.MSB_UNREGISTER_URL);
+        paramsMap.put("methodType", VnfmRestfulUtil.TYPE_DEL);
+        RestfulResponse rsp = VnfmRestfulUtil.getRemoteResponse(ParamConstants.MSB_UNREGISTER_URL,
+                VnfmRestfulUtil.TYPE_DEL, null);
+
+        LOG.error("funtion=register, status={}", rsp.getStatus());
+    }
+
+    private String getRegsiterBody() {
+        JSONObject body = new JSONObject();
+        body.put("serviceName", RegisterConfigInfo.getInstance().getServiceName());
+        body.put("version", RegisterConfigInfo.getInstance().getVersion());
+        body.put("url", RegisterConfigInfo.getInstance().getUrl());
+        body.put("protocol", RegisterConfigInfo.getInstance().getProtocol());
+        body.put("port", RegisterConfigInfo.getInstance().getPort());
+        body.put("ip", RegisterConfigInfo.getInstance().getIp());
+        body.put("ttl", RegisterConfigInfo.getInstance().getTtl());
+
+        return body.toString();
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/VnfMgr.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/VnfMgr.java
new file mode 100644 (file)
index 0000000..816af06
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.process;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.common.VnfmUtil;
+import org.openo.nfvo.vnfmadapter.service.adapter.impl.AdapterResourceManager;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.csm.vnf.VnfMgrVnfm;
+import org.openo.nfvo.vnfmadapter.service.dao.inf.VnfmDao;
+import org.openo.nfvo.vnfmadapter.service.entity.Vnfm;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+
+/**
+ * Provide function for instantiate or terminate VNF
+ * <br/>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 24, 2016
+ */
+public class VnfMgr {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VnfMgr.class);
+
+    private VnfmDao vnfmDao;
+
+    public void setVnfmDao(VnfmDao vnfmDao) {
+        this.vnfmDao = vnfmDao;
+    }
+
+
+    /**
+     * Scale vnf
+     * @param vnfObject
+     * {
+     *     "vnfInstanceId":"5",
+     *     "type":"SCALE_OUT",
+     *     "aspectId":"101",
+     *     "numberOfSteps":"1",
+     *     "additionalParam":{}
+     * }
+     * @param vnfmId
+     * @param vnfInstanceId
+     * @return
+     */
+    public JSONObject scaleVNF(JSONObject vnfObject, String vnfmId, String vnfInstanceId) {
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        try {
+
+            if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
+                return restJson;
+            }
+
+            JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
+            LOG.info("vnfm info:"+vnfmObjcet);
+            if(vnfmObjcet.isNullObject()) {
+                LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId="+vnfmId);
+                return restJson;
+            }
+            restJson = (new VnfMgrVnfm()).scaleVnf(vnfObject, vnfmObjcet, vnfmId, vnfInstanceId);
+        } catch(JSONException e) {
+            LOG.error("function=scaleVNF, msg=JSONException occurs, e={}.", e);
+        }
+
+        return restJson;
+    }
+
+    /**
+     * Provide function for instantiate VNF
+     * <br/>
+     *
+     * @param vnfObject
+     * @param vnfmId
+     * @return
+     * @since NFVO 0.5
+     */
+    public JSONObject addVnf(JSONObject vnfObject, String vnfmId) {
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        try {
+
+            if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
+                return restJson;
+            }
+
+            JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
+
+            if(vnfmObjcet.isNullObject()) {
+                return restJson;
+            }
+
+            Map<String, String> conMap = new ConcurrentHashMap<>(Constant.DEFAULT_COLLECTION_SIZE);
+            conMap.put("csarid", vnfObject.getString("vnfPackageId"));
+            conMap.put("vnfmid", vnfmId);
+            conMap.put("vnfDescriptorId",vnfObject.getString("vnfDescriptorId"));
+
+            JSONObject resObjcet = (new AdapterResourceManager()).uploadVNFPackage(null, conMap);
+
+            if(resObjcet.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
+                return restJson;
+            }
+
+            JSONObject csmBody = transferVnfBody(vnfObject, resObjcet, vnfmId);
+            restJson = (new VnfMgrVnfm()).createVnf(csmBody, vnfmObjcet);
+            saveVnfInfo(restJson, resObjcet);
+        } catch(JSONException e) {
+            LOG.error("function=addVnf, msg=JSONException occurs, e={}.", e);
+        }
+
+        return restJson;
+    }
+
+    /**
+     * Provide function for terminate VNF
+     * <br/>
+     *
+     * @param vnfId
+     * @param vnfmId
+     * @param vnfObject
+     * @return
+     * @since NFVO 0.5
+     */
+    public JSONObject deleteVnf(String vnfId, String vnfmId, JSONObject vnfObject) {
+        LOG.warn("function=deleteVnf ,msg=enter to delete a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        try {
+            JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
+            if(vnfmObjcet.isNullObject()) {
+                LOG.error("function=deleteVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
+                return restJson;
+            }
+
+            restJson = (new VnfMgrVnfm()).removeVnf(vnfmObjcet, vnfId, vnfObject);
+        } catch(JSONException e) {
+            LOG.error("function=deleteVnf, msg=JSONException occurs, e={}.", e);
+        }
+        return restJson;
+    }
+
+    /**
+     * Provide function for get VNF
+     * <br/>
+     *
+     * @param vnfId
+     * @param vnfmId
+     * @return
+     * @since NFVO 0.5
+     */
+    public JSONObject getVnf(String vnfId, String vnfmId) {
+        LOG.warn("function=getVnf ,msg=enter to get a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        try {
+            JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
+            if(vnfmObjcet.isNullObject()) {
+                LOG.error("function=getVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
+                return restJson;
+            }
+
+            restJson = (new VnfMgrVnfm()).getVnf(vnfmObjcet, vnfId);
+
+            return restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL ? restJson : getVnfBody(restJson);
+
+        } catch(JSONException e) {
+            LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
+            restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        }
+        return restJson;
+    }
+
+    private JSONObject getVnfBody(JSONObject restJson) {
+        try {
+            JSONObject vnfInfoJson = new JSONObject();
+            JSONObject basicInfoJson = new JSONObject();
+
+            JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
+
+            basicInfoJson.put("vnfInstanceId", retJson.getString("id"));
+            basicInfoJson.put("vnfInstanceName", retJson.getString("vapp_name"));
+            basicInfoJson.put("vnfInstanceDescription", "vFW");
+
+            Vnfm vnfm = vnfmDao.getVnfmById(retJson.getString("id"));
+            basicInfoJson.put("vnfdId", vnfm == null ? "" : vnfm.getVnfdId());
+            basicInfoJson.put("vnfdPackageId", vnfm == null ? "" : vnfm.getVnfPackageId());
+            basicInfoJson.put("version", vnfm == null ? "" : vnfm.getVersion());
+            basicInfoJson.put("vnfProvider", "hw");
+            basicInfoJson.put("vnfType", retJson.get("vapp_type"));
+            basicInfoJson.put("vnfStatus", retJson.getString(Constant.STATUS));
+
+            vnfInfoJson.put("vnfInfo", basicInfoJson);
+            vnfInfoJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
+            return vnfInfoJson;
+        } catch(JSONException e) {
+            LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
+            restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+            return restJson;
+        } catch(IndexOutOfBoundsException e) {
+            LOG.error("function=getVnf, msg=IndexOutOfBoundsException occurs, e={}.", e);
+            restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+            return restJson;
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private JSONObject transferVnfBody(JSONObject vnfObject, JSONObject resObject, String vnfmId) {
+        JSONObject restJson = new JSONObject();
+        JSONObject vappIfno = new JSONObject();
+        restJson.put("vnfd_id", resObject.getString("vnfdId"));
+        restJson.put("plan_id", resObject.getOrDefault("planId", ""));
+        restJson.put("plan_name", resObject.getOrDefault("planName", ""));
+        restJson.put("vapp_name", vnfObject.get("vnfInstanceName"));
+        restJson.put("project_id", vnfmId);
+        restJson.put("parameters", resObject.getJSONObject("parameters"));
+        restJson.put("nfvo_id", "");
+        restJson.put("location", "");
+        restJson.put("vnfm_id", vnfmId);
+        vappIfno.put("vapp_info", restJson);
+        return vappIfno;
+    }
+
+    /**
+     * Provide function for get job
+     * <br/>
+     *
+     * @param jobId
+     * @param vnfmId
+     * @return
+     * @since NFVO 0.5
+     */
+    public JSONObject getJob(String jobId, String vnfmId) {
+        LOG.warn("function=getJob ,msg=enter to get a job, vnfId:{}", jobId);
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        try {
+            JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
+            if(vnfmObjcet.isNullObject()) {
+                LOG.error("function=getJob, msg=vnfm not exists, vnfmId: {}", vnfmId);
+                return restJson;
+            }
+
+            restJson = (new VnfMgrVnfm()).getJob(vnfmObjcet, jobId);
+
+        } catch(JSONException e) {
+            LOG.error("function=getJob, msg=JSONException occurs, e={}.", e);
+            restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        }
+        return restJson;
+    }
+
+    /**
+     * Provide function for save vnfInfo
+     * <br/>
+     *
+     * @param vnfObject
+     * @param resObject
+     * @since NFVO 0.5
+     */
+    public void saveVnfInfo(JSONObject vnfObject, JSONObject resObject) {
+        LOG.warn("function=saveVnfInfo , vnfObject:{}", vnfObject);
+        if(vnfObject.getInt(Constant.RETCODE) == Constant.REST_SUCCESS) {
+            Vnfm info = new Vnfm();
+            info.setId(vnfObject.getJSONObject("data").getString("vnfInstanceId"));
+            info.setVersion(resObject.getString("vnfdVersion"));
+            info.setVnfdId(resObject.getString("vnfdId"));
+            info.setVnfPackageId("");
+            try {
+                vnfmDao.insertVnfm(info);
+            } catch(Exception e) {
+                LOG.error("function=saveVnfInfo, msg=ServiceException occurs, e={}.", e);
+            }
+        }
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/VnfResourceMgr.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/process/VnfResourceMgr.java
new file mode 100644 (file)
index 0000000..11bb229
--- /dev/null
@@ -0,0 +1,254 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.process;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VnfmRestfulUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.constant.ParamConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+
+/**
+ * Provide function of resource for VNFM.
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 25, 2016
+ */
+public class VnfResourceMgr {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VnfResourceMgr.class);
+
+    /**
+     * Provide function of grant resource for VNFM.
+     * <br/>
+     *
+     * @param vnfObj
+     * @param vnfId
+     * @param vnfmId
+     * @return
+     * @since NFVO 0.5
+     */
+    public JSONObject grantVnfResource(JSONObject vnfObj, String vnfId, String vnfmId) {
+        LOG.warn("function=grantVnfResource, msg=enter to grant vnf resource, params: {}", vnfObj);
+        JSONObject resultJson = new JSONObject();
+        resultJson.put("retCode", Constant.REST_FAIL);
+        try {
+            String type = vnfObj.getString("type");
+            String requestType = vnfObj.getString("operation_right");
+            String vnfName = vnfObj.getString("vnf_name");
+
+            if(StringUtils.isEmpty(type) || StringUtils.isEmpty(requestType) || StringUtils.isEmpty(vnfName)
+                    || StringUtils.isEmpty(vnfId)) {
+                LOG.error("function=grantVnfResource, msg=grant basic params error");
+                resultJson.put("errorMsg", "basic params error");
+                return resultJson;
+            }
+
+            JSONArray vmList = vnfObj.getJSONArray("vm_list");
+
+            Map<String, Integer> resMap = calculateGrantRes(vmList);
+
+            if(null == resMap) {
+                LOG.error("function=grantVnfResource, msg=grant resource params error");
+                resultJson.put("errorMsg", "resource params error");
+                return resultJson;
+            }
+
+            JSONObject grantObj = new JSONObject();
+            grantObj.put("vimId", vnfObj.getString("vim_id"));
+            grantObj.put("vnfId", vnfId);
+            grantObj.put("vnfName", vnfName);
+            grantObj.put("vnfmId", vnfmId);
+            String action = getGrantAction(type, requestType);
+            grantObj.put("action", action);
+
+            JSONObject grantParam = parseGrantParam(resMap, grantObj);
+            resultJson = sendGrantToResmgr(grantParam);
+            LOG.error("function=grantVnfResource, resultJson={}.", resultJson);
+        } catch(JSONException e) {
+            LOG.error("function=grantVnfResource, msg=parse params occoured JSONException e={}.", e);
+            resultJson.put("errorMsg", "params parse exception");
+        }
+
+        return resultJson;
+    }
+
+    /**
+     * <br>
+     *
+     * @param grantParam
+     * @return
+     * @since NFVO 0.5
+     */
+    private JSONObject sendGrantToResmgr(JSONObject grantParam) {
+        RestfulResponse rsp = VnfmRestfulUtil.getRemoteResponse(ParamConstants.GRANT_RES_URL, VnfmRestfulUtil.TYPE_PUT,
+                grantParam.toString());
+        if(rsp == null || rsp.getStatus() != Constant.HTTP_OK) {
+            return null;
+        }
+        LOG.error("funtion=sendGrantToResmgr, status={}", rsp.getStatus());
+        return JSONObject.fromObject(rsp.getResponseContent());
+    }
+
+    /**
+     * <br>
+     *
+     * @param resMap
+     * @param grantParam
+     * @return
+     * @since NFVO 0.5
+     */
+    private JSONObject parseGrantParam(Map<String, Integer> resMap, JSONObject grantParam) {
+        JSONObject result = new JSONObject();
+        result.put("vnfInstanceId", grantParam.getString("vnfId"));
+        result.put("vimId", grantParam.getString("vimId"));
+
+        JSONArray resource = new JSONArray();
+        JSONObject resourceObj = new JSONObject();
+        resourceObj.put("type", "vdu");
+        JSONObject resourceTemplate = new JSONObject();
+        JSONObject storage = new JSONObject();
+        storage.put("sizeOfStorage", resMap.get("diskNum"));
+        storage.put("typeOfStorage", "");
+        storage.put("swImageDescriptor", "");
+        JSONObject compute = new JSONObject();
+        JSONObject virtualMemory = new JSONObject();
+        virtualMemory.put("virtualMemSize", resMap.get("memNum"));
+        JSONObject virtualCpu = new JSONObject();
+        virtualCpu.put("numVirtualCpu", resMap.get("cpuNum"));
+        compute.put("virtualMemory", virtualMemory);
+        compute.put("virtualCpu", virtualCpu);
+        resourceTemplate.put("virtualStorageDescriptor", storage);
+        resourceTemplate.put("virtualComputeDescriptor", compute);
+        resourceObj.put("resourceTemplate", resourceTemplate);
+        resourceObj.put("resourceDefinitionId", "");
+        resourceObj.put("vdu", grantParam.getString("vnfName"));
+        resource.add(resourceObj);
+
+        if("online".equals(grantParam.getString("action")) || "scaleOut".equals(grantParam.getString("action"))) {
+            result.put("addResource", resource);
+        } else {
+            result.put("removeResource", resource);
+        }
+
+        JSONObject additionalParam = new JSONObject();
+        additionalParam.put("vnfmId", grantParam.getString("vnfmId"));
+        additionalParam.put("vimId", grantParam.getString("vimId"));
+        additionalParam.put("tenant", "");
+        result.put("additionalParam", additionalParam);
+        LOG.info("funtion=parseGrantParam, result={}", result);
+        return result;
+    }
+
+    private Map<String, Integer> calculateGrantRes(JSONArray vmList) {
+        Map<String, Integer> resMap = new HashMap<>(Constant.DEFAULT_COLLECTION_SIZE);
+        int vmSize = vmList.size();
+        int cpuNum = 0;
+        int memNum = 0;
+        int diskNum = 0;
+        int diskSize = 0;
+        int cpuTmp = 0;
+        int memTmp = 0;
+        int diskTmp = 0;
+        int initNum = 0;
+
+        try {
+            for(int i = 0; i < vmSize; i++) {
+                JSONObject resInfo = vmList.getJSONObject(i);
+                JSONObject vmFlavor = resInfo.getJSONObject("vm_flavor");
+                initNum = Integer.parseInt(resInfo.getString("init_number"));
+
+                if(initNum == 0) {
+                    continue;
+                }
+
+                JSONArray volumList = vmFlavor.getJSONArray("storage");
+                diskSize = volumList.size();
+
+                for(int j = 0; j < diskSize; j++) {
+                    JSONObject volumeInfo = volumList.getJSONObject(j);
+                    diskTmp += getDiskQuantity(volumeInfo);
+                }
+
+                cpuTmp = Integer.parseInt(vmFlavor.getString("num_cpus"));
+                memTmp = Integer.parseInt(vmFlavor.getString("mem_size"));
+
+                cpuNum += cpuTmp * initNum;
+                memNum += memTmp * initNum;
+                diskNum += diskTmp * initNum;
+
+                diskTmp = 0;
+
+            }
+        } catch(JSONException e) {
+            LOG.error("function=calculateGrantRes, msg=parse params occoured JSONException e={}.", e);
+            return null;
+        }
+
+        resMap.put("cpuNum", cpuNum);
+        resMap.put("memNum", memNum);
+        resMap.put("diskNum", diskNum);
+        return resMap;
+    }
+
+    private String getGrantAction(String type, String requestType) {
+        String action = "unknown";
+
+        if(("increase").equals(requestType)) {
+            if(("instantiation").equals(type)) {
+                action = "online";
+            } else if(("scale").equals(type)) {
+                action = "scaleOut";
+            }
+
+        } else if(("decrease").equals(requestType)) {
+            if(("instantiation").equals(type)) {
+                action = "offline";
+            } else if(("scale").equals(type)) {
+                action = "scaleIn";
+            }
+        }
+
+        return action;
+    }
+
+    private int getDiskQuantity(JSONObject volumeObj) {
+        int disk = 0;
+        if(volumeObj.containsKey("vol_type")) {
+            if("local_volume".equals(volumeObj.getString("vol_type"))) {
+                disk = Integer.parseInt(volumeObj.getString("vol_size"));
+            }
+        } else if(volumeObj.containsKey("storage_type") && "local_image".equals(volumeObj.getString("storage_type"))) {
+
+            disk = Integer.parseInt(volumeObj.getString("disk_size"));
+
+        }
+        return disk;
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/AuthRoa.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/AuthRoa.java
new file mode 100644 (file)
index 0000000..445dd61
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.openo.nfvo.vnfmadapter.common.VnfmJsonUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.constant.ParamConstants;
+import org.openo.nfvo.vnfmadapter.service.process.AuthMgr;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONObject;
+
+/**
+ * Provide interfaces for authInfo
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 24, 2016
+ */
+@Path("/rest/plat/smapp/v1")
+@Consumes(MediaType.APPLICATION_JSON)
+@Produces(MediaType.APPLICATION_JSON)
+public class AuthRoa {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AuthRoa.class);
+
+    private AuthMgr authMgr;
+
+    public void setAuthMgr(AuthMgr authMgr) {
+        this.authMgr = authMgr;
+    }
+
+    /**
+     * Provide interface for add authInfo
+     * <br/>
+     *
+     * @param context
+     * @return
+     * @since NFVO 0.5
+     */
+    @PUT
+    @Path("/oauth/token")
+    public String authToken(@Context HttpServletRequest context, @Context HttpServletResponse resp) {
+        LOG.warn("function=login, msg=enter to get token.");
+        JSONObject subJsonObject = VnfmJsonUtil.getJsonFromContexts(context);
+        LOG.warn("subJsonObject: {}", subJsonObject);
+
+        if(null == subJsonObject) {
+            LOG.error("function=login, msg=params are insufficient");
+            String resultStr = "Login params insufficient";
+            resp.setStatus(Constant.HTTP_BAD_REQUEST);
+
+            return resultStr;
+        }
+
+        JSONObject authResult = authMgr.authToken(subJsonObject);
+        LOG.warn("authResult: {}", authResult);
+        if(authResult.getInt("retCode") == Constant.REST_SUCCESS) {
+            JSONObject data = authResult.getJSONObject("data");
+
+            resp.setStatus(Constant.HTTP_OK);
+            // resp.setHeader("accessSession", data.getString("accessSession"));
+            return data.toString();// String.format(ParamConstants.GET_TOKEN_SUC_RESP,
+            // data.getString("userName"),
+            // data.getString("userName"), data.getString("roaRand"));
+        } else if(authResult.getInt("retCode") == Constant.HTTP_INNERERROR) {
+            Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(authResult.getString("data")).build();
+
+            return String.format(ParamConstants.GET_TOKEN_FAIL_RESP, authResult.getString("data"));
+        } else {
+            Response.status(Response.Status.UNAUTHORIZED).entity(authResult.getString("data")).build();
+
+            return String.format(ParamConstants.GET_TOKEN_FAIL_RESP, authResult.getString("data"));
+        }
+    }
+
+    /**
+     * Provide interface for delete authInfo
+     * <br/>
+     *
+     * @param context
+     * @param userName
+     * @param roarand
+     * @return
+     * @since NFVO 0.5
+     */
+    @DELETE
+    @Path("/auth/tokens/{userName}/{roarand}")
+    public String delAuthToken(@Context HttpServletRequest context, @PathParam("userName") String userName,
+                               @PathParam("roarand") String roarand, @Context HttpServletResponse resp) {
+        LOG.warn("function=logout, msg=enter to logout");
+        JSONObject resultJson = new JSONObject();
+
+        resultJson.put("Information", "Operation success");
+        resp.setStatus(Constant.HTTP_NOCONTENT);
+        LOG.warn("function=logout, msg=end to logout");
+        return resultJson.toString();
+    }
+
+    /**
+     * Provide interface for handshake authInfo
+     * <br/>
+     *
+     * @param context
+     * @param roattr
+     * @return
+     * @since NFVO 0.5
+     */
+    @GET
+    @Path("/nfvo/shakehand")
+    public String shakehand(@Context HttpServletRequest context, @QueryParam("roattr") String roattr,
+                            @Context HttpServletResponse resp) {
+        JSONObject resultJson = new JSONObject();
+        resultJson.put("status", "running");
+        resultJson.put("description", "Operation success");
+        resp.setStatus(Constant.HTTP_OK);
+
+        return resultJson.toString();
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/SwaggerRoa.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/SwaggerRoa.java
new file mode 100644 (file)
index 0000000..5dfd290
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest;
+
+import java.io.IOException;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.commons.io.IOUtils;
+
+/**
+ * Swagger API Doc.<br/>
+ *
+ * @author
+ * @version NFVO 0.5 Oct 24, 2016
+ */
+@Path("/openoapi/hwvnfm/v1")
+@Produces({MediaType.APPLICATION_JSON})
+public class SwaggerRoa {
+    /**
+     * API doc.
+     * @param filename
+     * @return
+     * @throws IOException
+     */
+    @GET
+    @Path("/swagger.json")
+    public String apidoc() throws IOException{
+        ClassLoader classLoader = getClass().getClassLoader();
+        return IOUtils.toString(classLoader.getResourceAsStream("swagger.json"));
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/VnfAdapterResourceRoa.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/VnfAdapterResourceRoa.java
new file mode 100644 (file)
index 0000000..138e284
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+
+import org.openo.nfvo.vnfmadapter.service.adapter.impl.AdapterResourceManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONObject;
+
+
+/**
+ * Provide interfaces of resource for VNFM.
+ * <br/>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 24, 2016
+ */
+@Path("/rest/v2/computeservice/getAllCloud")
+@Consumes(MediaType.APPLICATION_JSON)
+@Produces(MediaType.APPLICATION_JSON)
+public class VnfAdapterResourceRoa {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VnfAdapterResourceRoa.class);
+
+
+    /**
+     * Provide function of grant resource.
+     * <br/>
+     *
+     * @param context
+     * @return
+     * @since NFVO 0.5
+     */
+    @GET
+    public String getAllCloudInfo(@Context HttpServletRequest context) {
+        LOG.info("function=getAllCloudInfo, msg=getAllCloudInfo resource");
+
+        //Find a way to get url and pass it getAllCloud(); //NOSONAR
+
+        AdapterResourceManager arm = new AdapterResourceManager();
+        JSONObject resultObj = arm.getAllCloud("","");
+
+        return resultObj.getString("vim_id");
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/VnfResourceRoa.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/VnfResourceRoa.java
new file mode 100644 (file)
index 0000000..ad7663e
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+
+import org.openo.nfvo.vnfmadapter.common.VnfmJsonUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.process.VnfResourceMgr;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONObject;
+
+/**
+ * Provide interfaces of resource for VNFM.
+ * <br/>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 24, 2016
+ */
+@Path("/rest/vnfmmed/csm/v2/vapps")
+@Consumes(MediaType.APPLICATION_JSON)
+@Produces(MediaType.APPLICATION_JSON)
+public class VnfResourceRoa {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VnfResourceRoa.class);
+
+    private VnfResourceMgr vnfResourceMgr;
+
+    public void setVnfResourceMgr(VnfResourceMgr vnfResourceMgr) {
+        this.vnfResourceMgr = vnfResourceMgr;
+    }
+
+    /**
+     * Provide function of grant resource.
+     * <br/>
+     *
+     * @param context
+     * @param vnfId
+     * @return
+     * @since NFVO 0.5
+     */
+    @PUT
+    @Path("/instances/{vnfId}/grant")
+    public String grantVnfRes(@Context HttpServletRequest context, @PathParam("vnfId") String vnfId) {
+        LOG.info("function=grantVnfRes, msg=enter to grant vnf resource.");
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+
+        JSONObject dataObject = VnfmJsonUtil.getJsonFromContexts(context);
+        LOG.info("function=grantVnfRes, dataObject: {}", dataObject);
+        /*if(null == dataObject) {
+            LOG.error("function=grantVnfRes, msg=param error");
+            restJson.put("data", "Params error");
+            return restJson.toString();
+        }
+
+        JSONObject grantObj = dataObject.getJSONObject("grant");
+
+        if(null == grantObj) {
+            LOG.error("function=grantVnfRes, msg=param error");
+            restJson.put("data", "Grant param error");
+            return restJson.toString();
+        }
+
+        String vnfmId = grantObj.getString("project_id");
+
+        JSONObject resultObj = vnfResourceMgr.grantVnfResource(grantObj, vnfId, vnfmId);*/
+        JSONObject res = new JSONObject();
+        res.put("msg","grant success");
+        return res.toString();
+    }
+
+    @PUT
+    @Path("/lifecycle_changes_notification")
+    public String notify(@Context HttpServletRequest context) {
+        LOG.info("function=notify, msg=enter to notify vnf resource");
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
+
+        return restJson.toString();
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/VnfRoa.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/VnfRoa.java
new file mode 100644 (file)
index 0000000..c68cb61
--- /dev/null
@@ -0,0 +1,286 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.commons.collections.map.UnmodifiableMap;
+import org.apache.commons.lang3.StringUtils;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.common.VnfmJsonUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.process.VnfMgr;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONObject;
+
+/**
+ * Provide interfaces for instantiate or terminate VNF.
+ * <br/>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 24, 2016
+ */
+@SuppressWarnings("unchecked")
+@Path("/openoapi/hwvnfm/v1")
+@Consumes(MediaType.APPLICATION_JSON)
+@Produces(MediaType.APPLICATION_JSON)
+public class VnfRoa {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VnfRoa.class);
+
+    private VnfMgr vnfMgr;
+
+    private static Map<String, String> PROGRESSITEM;
+
+    private static Map<String, String> JOBSTATUSITEM;
+
+    static {
+        Map<String, String> map = new HashMap<>();
+        map.put("Building", "50");
+        map.put("Active", "100");
+        map.put("Stopped", "50");
+        map.put("Error", "100");
+        PROGRESSITEM = UnmodifiableMap.decorate(map);
+
+        map = new HashMap<>();
+        map.put("Building", "processing");
+        map.put("Active", "finished");
+        map.put("Stopped", "processing");
+        map.put("Error", "error");
+        JOBSTATUSITEM = UnmodifiableMap.decorate(map);
+    }
+
+    public void setVnfMgr(VnfMgr vnfMgr) {
+        this.vnfMgr = vnfMgr;
+    }
+
+    /**
+     * Scale VNF
+     * 
+     * @param context
+     *            * {
+     *            "vnfInstanceId":"5",
+     *            "type":"SCALE_OUT",
+     *            "aspectId":"101",
+     *            "numberOfSteps":"1",
+     *            "additionalParam":{}
+     *            }
+     * @param resp
+     * @param vnfmId
+     * @return
+     *         {
+     *         "jobId":"1"
+     *         }
+     * @throws ServiceException
+     */
+    @POST
+    @Path("/{vnfmId}/vnfs/{vnfInstanceId}/scale")
+    public String scaleVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
+            @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId)
+            throws ServiceException {
+        JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
+        LOG.info("function=scaleVNF, msg=enter to scale a vnf. request body:" + jsonObject);
+        JSONObject result = new JSONObject();
+        String msg = "";
+        if(null == jsonObject) {
+            msg = "the parameters do not meet the requirements,please check it!";
+            LOG.error("function=scalVnf," + msg);
+            resp.setStatus(Constant.HTTP_NOT_ACCEPTABLE);
+            result.put("msg", msg);
+            return result.toString();
+        }
+
+        result = vnfMgr.scaleVNF(jsonObject, vnfmId, vnfInstanceId);
+        LOG.info("function=scaleVNF,result=" + result.toString());
+        if(result.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
+            LOG.error("function=scaleVNF, msg=scaleVnf fail");
+            resp.setStatus(Constant.HTTP_INNERERROR);
+            return result.toString();
+        }
+        return JSONObject.fromObject(result.getJSONObject("data")).toString();
+    }
+
+    /**
+     * Provide function for instantiate VNF
+     * <br/>
+     *
+     * @param context
+     * @param resp
+     * @param vnfmId
+     * @return
+     * @throws ServiceException
+     * @since NFVO 0.5
+     */
+    @POST
+    @Path("/{vnfmId}/vnfs")
+    public String addVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
+            @PathParam("vnfmId") String vnfmId) throws ServiceException {
+        LOG.warn("function=addVnf, msg=enter to add a vnf");
+        JSONObject subJsonObject = VnfmJsonUtil.getJsonFromContexts(context);
+        JSONObject restJson = new JSONObject();
+
+        if(null == subJsonObject) {
+            LOG.error("function=addVnf, msg=params are insufficient");
+            resp.setStatus(Constant.HTTP_INNERERROR);
+            return restJson.toString();
+        }
+        LOG.info("addVnf request info from (LCM):" + subJsonObject);
+        restJson = vnfMgr.addVnf(subJsonObject, vnfmId);
+
+        if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
+            LOG.error("function=addVnf, msg=addvnf fail");
+            resp.setStatus(Constant.HTTP_INNERERROR);
+            return restJson.toString();
+        }
+
+        return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
+    }
+
+    /**
+     * Provide function for terminate VNF
+     * <br/>
+     *
+     * @param vnfmId
+     * @param resp
+     * @param vnfInstanceId
+     * @param context
+     * @return
+     * @throws ServiceException
+     * @since NFVO 0.5
+     */
+    @POST
+    @Path("/{vnfmId}/vnfs/{vnfInstanceId}/terminate")
+    public String delVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
+            @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context)
+            throws ServiceException {
+        LOG.warn("function=delVnf, msg=enter to delete a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
+        JSONObject vnfObject = VnfmJsonUtil.getJsonFromContexts(context);
+        JSONObject restJson = new JSONObject();
+
+        if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
+            resp.setStatus(Constant.HTTP_INNERERROR);
+            return restJson.toString();
+        }
+
+        restJson = vnfMgr.deleteVnf(vnfInstanceId, vnfmId, vnfObject);
+        if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
+            LOG.error("function=delVnf, msg=delVnf fail");
+            resp.setStatus(Constant.HTTP_INNERERROR);
+            return restJson.toString();
+        }
+
+        return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
+    }
+
+    /**
+     * Provide function for get VNF
+     * <br/>
+     *
+     * @param vnfmId
+     * @param resp
+     * @param vnfInstanceId
+     * @param context
+     * @return
+     * @throws ServiceException
+     * @since NFVO 0.5
+     */
+    @GET
+    @Path("/{vnfmId}/vnfs/{vnfInstanceId}")
+    public String getVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
+            @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context)
+            throws ServiceException {
+        LOG.warn("function=getVnf, msg=enter to get a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
+        JSONObject restJson = new JSONObject();
+
+        if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
+            resp.setStatus(Constant.HTTP_INNERERROR);
+            return restJson.toString();
+        }
+
+        restJson = vnfMgr.getVnf(vnfInstanceId, vnfmId);
+        if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
+            LOG.error("function=getVnf, msg=getVnf fail");
+            resp.setStatus(Constant.HTTP_INNERERROR);
+            return restJson.toString();
+        }
+
+        restJson.remove(Constant.RETCODE);
+        return restJson.toString();
+    }
+
+    /**
+     * Provide function for get job
+     * <br/>
+     *
+     * @param jobId
+     * @param vnfmId
+     * @param resp
+     * @param responseId
+     * @return
+     * @throws ServiceException
+     * @since NFVO 0.5
+     */
+    @GET
+    @Path("/{vnfmId}/jobs/{jobId}")
+    public String getJob(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
+            @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) throws ServiceException {
+        LOG.warn("function=getJob, msg=enter to get a job: jobId: {}", jobId);
+        JSONObject restJson = new JSONObject();
+
+        if(StringUtils.isEmpty(jobId) || StringUtils.isEmpty(vnfmId)) {
+            resp.setStatus(Constant.HTTP_INNERERROR);
+            return restJson.toString();
+        }
+
+        restJson = vnfMgr.getJob(jobId, vnfmId);
+        if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
+            LOG.error("function=getJob, msg=getJob fail");
+            resp.setStatus(Constant.HTTP_INNERERROR);
+            return restJson.toString();
+        }
+
+        return getJobBody(restJson);
+    }
+
+    private String getJobBody(JSONObject restJson) {
+        JSONObject responseJson = new JSONObject();
+        JSONObject jobInfoJson = new JSONObject();
+        JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
+        jobInfoJson.put("jobId", retJson.getString("id"));
+        responseJson.put("progress", PROGRESSITEM.get(retJson.getString(Constant.STATUS)));
+        responseJson.put("status", JOBSTATUSITEM.get(retJson.getString(Constant.STATUS)));
+        responseJson.put("errorCode", "null");
+        responseJson.put("responseId", PROGRESSITEM.get(retJson.getString(Constant.STATUS)));
+        jobInfoJson.put("responsedescriptor", responseJson);
+        return jobInfoJson.toString();
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ExceptionMessage.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ExceptionMessage.java
new file mode 100644 (file)
index 0000000..7b4738d
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest.exceptionmapper;
+
+import org.apache.http.HttpStatus;
+
+/**
+ * Exception response model.<br>
+ *
+ * @author
+ * @version NFVO 0.5 Sep 27, 2016
+ */
+public class ExceptionMessage {
+
+       private String errorCode = "unknown.error";
+
+       private int httpCode = HttpStatus.SC_INTERNAL_SERVER_ERROR;
+
+       private String message;
+
+       @Override
+       public String toString() {
+           return "Error {errorCode=" + this.errorCode + ", httpCode=" + this.httpCode + ", message="
+                   + this.message + "}";
+       }
+
+       public String getErrorCode() {
+           return this.errorCode;
+       }
+
+       public void setErrorCode(String errorCode) {
+           this.errorCode = errorCode;
+       }
+
+       public String getMessage() {
+           return this.message;
+       }
+
+       public void setMessage(String message) {
+           this.message = message;
+       }
+
+       public int getHttpCode() {
+           return this.httpCode;
+       }
+
+       public void setHttpCode(int httpCode) {
+           this.httpCode = httpCode;
+       }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/GenericExceptionMapper.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/GenericExceptionMapper.java
new file mode 100644 (file)
index 0000000..25eb8c2
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest.exceptionmapper;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
+
+/**
+ * Generic exception response provider.<br>
+ *
+ *
+ * @author
+ * @version     NFVO 0.5 Sep 27, 2016
+ */
+@Provider
+public class GenericExceptionMapper implements ExceptionMapper<Exception>{
+
+    @Override
+    public Response toResponse(Exception exception) {
+        ExceptionMessage message = new ExceptionMessage();
+        message.setMessage(exception.getMessage());
+        return Response.status(message.getHttpCode()).type(
+                MediaType.APPLICATION_JSON).entity(message).build();
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ServiceExceptionMapper.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ServiceExceptionMapper.java
new file mode 100644 (file)
index 0000000..957c0d4
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest.exceptionmapper;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
+
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+
+/**
+ * ServiceException response provider.<br>
+ *
+ * @author
+ * @version     NFVO 0.5 Sep 27, 2016
+ */
+@Provider
+public class ServiceExceptionMapper implements ExceptionMapper<ServiceException>{
+
+    @Override
+    public Response toResponse(ServiceException exception) {
+        ExceptionMessage message = new ExceptionMessage();
+        message.setErrorCode(exception.getId());
+        message.setHttpCode(exception.getHttpCode());
+        message.setMessage(exception.getMessage());
+        return Response.status(message.getHttpCode()).
+                type(MediaType.APPLICATION_JSON).entity(message).build();
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/log4j.properties b/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/log4j.properties
new file mode 100644 (file)
index 0000000..833c7a7
--- /dev/null
@@ -0,0 +1,23 @@
+###############################################################################
+# Copyright 2016, Huawei Technologies Co., Ltd.
+#
+# 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.
+###############################################################################
+log4j.rootLogger=INFO,root
+log4j.appender.root.Append=true
+log4j.appender.root.File=${catalina.base}/logs/vnfmadapterservice.log
+log4j.appender.root.layout.ConversionPattern=%d %-5p [%t][%X{moduleID}][%C %L] %m%n
+log4j.appender.root.layout=org.apache.log4j.PatternLayout
+log4j.appender.root.MaxBackupIndex=50
+log4j.appender.root.MaxFileSize=20MB
+log4j.appender.root=org.apache.log4j.RollingFileAppender
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/mybatis/mysql/vnfmadapter.xml b/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/mybatis/mysql/vnfmadapter.xml
new file mode 100644 (file)
index 0000000..d9b7295
--- /dev/null
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright 2016-2017, Huawei Technologies Co., Ltd.
+
+    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.
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.openo.nfvo.vnfmadapter.service.mapper.VnfmMapper">
+    <resultMap type="org.openo.nfvo.vnfmadapter.service.entity.Vnfm"
+        id="VnfmResultMap">
+        <result property="id" javaType="String" column="ID" jdbcType="VARCHAR" />
+        <result property="version" javaType="String" column="VERSION" jdbcType="VARCHAR" />
+        <result property="vnfdId" javaType="String" column="VNFDID" jdbcType="VARCHAR" />
+        <result property="vnfPackageId" javaType="String" column="VNFPACKAGEID" jdbcType="VARCHAR" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        ID, VERSION, VNFDID, VNFPACKAGEID
+    </sql>
+
+    <insert id="insertVnfm" parameterType="org.openo.nfvo.vnfmadapter.service.entity.Vnfm">
+        INSERT INTO VNFM (ID, VERSION, VNFDID, VNFPACKAGEID)
+        VALUES(#{id},#{version},#{vnfdId},#{vnfPackageId})
+    </insert>
+
+    <update id="updateVnfm" parameterType="org.openo.nfvo.vnfmadapter.service.entity.Vnfm">
+        UPDATE VNFM
+        <set>
+            <if test="id != null">
+                id=#{id},
+            </if>
+            <if test="version != null">
+                version=#{version},
+            </if>
+            <if test="vnfdId != null">
+                vnfdId=#{vnfdId},
+            </if>
+            <if test="vnfPackageId != null">
+                vnfPackageId=#{vnfPackageId},
+            </if>
+        </set>
+        WHERE ID=#{id}
+    </update>
+
+    <delete id="deleteVnfm" parameterType="String">
+        DELETE FROM VNFM WHERE ID = #{id}
+    </delete>
+
+    <select id="indexVnfms" resultMap="VnfmResultMap" >
+        select
+        <include refid="Base_Column_List" />
+            FROM VNFM
+        ORDER BY NAME DESC
+        <if test="offset!=0 and pageSize!=0 ">
+            limit ${offset}, ${pageSize}
+        </if>
+    </select>
+
+    <select id="getCountVnfms" parameterType="String" resultType="java.lang.Integer">
+        SELECT COUNT(*) FROM VNFM
+    </select>
+
+    <select id="getVnfmById" parameterType="java.lang.String" resultType="org.openo.nfvo.vnfmadapter.service.entity.Vnfm">
+        SELECT * FROM VNFM
+        WHERE id = #{id}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/registerService.properties b/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/registerService.properties
new file mode 100644 (file)
index 0000000..b7520c0
--- /dev/null
@@ -0,0 +1,23 @@
+###############################################################################
+# Copyright 2016, Huawei Technologies Co., Ltd.
+#
+# 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.
+###############################################################################
+serviceName=hw-vnfm
+version=v1
+url=/openoapi/hw-vnfm/v1
+protocol=REST
+visualRange=1
+ip=10.229.33.207
+port=8988
+ttl=0
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/spring/Vnfmadapter/services.xml b/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/spring/Vnfmadapter/services.xml
new file mode 100644 (file)
index 0000000..fb73cd4
--- /dev/null
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2016-2017, Huawei Technologies Co., Ltd.
+
+    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.
+ -->
+
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:osgix="http://www.springframework.org/schema/osgi-compendium"
+    xmlns:ctx="http://www.springframework.org/schema/context"
+    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+    xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
+    xsi:schemaLocation="
+    http://www.springframework.org/schema/beans
+    http://www.springframework.org/schema/beans/spring-beans.xsd
+    http://www.springframework.org/schema/osgi
+    http://www.springframework.org/schema/osgi/spring-osgi.xsd
+    http://www.springframework.org/schema/context
+    http://www.springframework.org/schema/context/spring-context.xsd
+    http://www.springframework.org/schema/osgi-compendium
+    http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd
+    http://cxf.apache.org/jaxrs
+    http://cxf.apache.org/schemas/jaxrs.xsd
+    http://cxf.apache.org/transports/http/configuration
+    http://cxf.apache.org/schemas/configuration/http-conf.xsd
+    http://www.springframework.org/schema/aop
+    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
+
+    <!-- these are included in the dependency jar -->
+    <import resource="classpath:META-INF/cxf/cxf.xml" />
+    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
+
+    <bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
+
+    <bean id="source"  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
+        <property name="url" value="jdbc:mysql://localhost:3306/vnfmdb" />
+        <property name="username" value="root"/>
+        <property name="password" value="rootpass"/>
+    </bean>
+
+    <bean id="sessionFactory"  class="org.mybatis.spring.SqlSessionFactoryBean">
+        <property name="dataSource" ref="source" />
+        <property name="mapperLocations" value="classpath*:mybatis/mysql/*.xml" />
+        <!-- <property name="configLocation" value="classpath:mybatis-config.xml" />  -->
+    </bean>
+
+    <bean id="session" class="org.mybatis.spring.SqlSessionTemplate">
+        <constructor-arg index="0" ref="sessionFactory" />
+    </bean>
+
+
+    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+        <property name="dataSource" ref="source" />
+    </bean>
+
+    <bean id="vnfmDao"
+        class="org.openo.nfvo.vnfmadapter.service.dao.impl.VnfmDaoImpl">
+        <property name="session" ref="session"></property>
+    </bean>
+
+    <bean id="vnfMgr" class="org.openo.nfvo.vnfmadapter.service.process.VnfMgr">
+        <property name="vnfmDao" ref="vnfmDao"></property>
+    </bean>
+
+    <bean id="VnfRoa" class="org.openo.nfvo.vnfmadapter.service.rest.VnfRoa">
+        <property name="vnfMgr" ref="vnfMgr"></property>
+    </bean>
+
+    <bean id="vnfResourceMgr"
+        class="org.openo.nfvo.vnfmadapter.service.process.VnfResourceMgr">
+    </bean>
+
+    <bean id="VnfResourceRoa" class="org.openo.nfvo.vnfmadapter.service.rest.VnfResourceRoa">
+        <property name="vnfResourceMgr" ref="vnfResourceMgr"></property>
+    </bean>
+
+    <bean id="authMgr" class="org.openo.nfvo.vnfmadapter.service.process.AuthMgr" />
+
+    <bean id="AuthRoa" class="org.openo.nfvo.vnfmadapter.service.rest.AuthRoa">
+        <property name="authMgr" ref="authMgr"></property>
+    </bean>
+
+    <bean id="VnfAdaResRoa" class="org.openo.nfvo.vnfmadapter.service.rest.VnfAdapterResourceRoa">
+    </bean>
+
+    <bean id="SwaggerRoa" class="org.openo.nfvo.vnfmadapter.service.rest.SwaggerRoa"></bean>
+
+    <!-- bean id="registerMgr" class="org.openo.nfvo.vnfmadapter.service.process.RegisterMgr"
+        init-method="register" destroy-method="unRegister">
+    </bean-->
+
+    <jaxrs:server id="restContainer" address="/">
+        <jaxrs:serviceBeans>
+            <ref bean="AuthRoa" />
+            <ref bean="VnfResourceRoa" />
+            <ref bean="VnfRoa" />
+            <ref bean="VnfAdaResRoa" />
+            <ref bean="SwaggerRoa" />
+        </jaxrs:serviceBeans>
+        <jaxrs:providers>
+            <ref bean="jsonProvider" />
+            <bean class="org.openo.nfvo.vnfmadapter.service.rest.exceptionmapper.ServiceExceptionMapper" />
+            <bean class="org.openo.nfvo.vnfmadapter.service.rest.exceptionmapper.GenericExceptionMapper" />
+        </jaxrs:providers>
+    </jaxrs:server>
+</beans>
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/spring/Vnfmadapter/svc_register.xml b/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/spring/Vnfmadapter/svc_register.xml
new file mode 100644 (file)
index 0000000..8fa5e0d
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright 2016-2017 Huawei Technologies Co., Ltd.
+    
+    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.
+ -->
+
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:aop="http://www.springframework.org/schema/aop"
+    xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:osgix="http://www.springframework.org/schema/osgi-compendium"
+    xmlns:ctx="http://www.springframework.org/schema/context"
+    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+    xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
+    xsi:schemaLocation="
+    http://www.springframework.org/schema/beans
+    http://www.springframework.org/schema/beans/spring-beans.xsd
+    http://www.springframework.org/schema/osgi
+    http://www.springframework.org/schema/osgi/spring-osgi.xsd
+    http://www.springframework.org/schema/context
+    http://www.springframework.org/schema/context/spring-context.xsd
+    http://www.springframework.org/schema/osgi-compendium
+    http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd
+    http://cxf.apache.org/jaxrs
+    http://cxf.apache.org/schemas/jaxrs.xsd
+    http://cxf.apache.org/transports/http/configuration
+    http://cxf.apache.org/schemas/configuration/http-conf.xsd
+    http://www.springframework.org/schema/aop
+    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
+    <bean class="org.openo.nfvo.vnfmadapter.service.activator.RoaVnfmServicePostProcessor"></bean>
+    <bean class="org.openo.nfvo.vnfmadapter.service.api.internalsvc.impl.VnfmAdapterMgrService"></bean>
+    <bean class="org.openo.nfvo.vnfmadapter.service.activator.RoaVnfmService2DriverMgr"></bean>
+    <bean class="org.openo.nfvo.vnfmadapter.service.api.internalsvc.impl.VnfmAdapter2DriverMgrService"></bean>
+</beans>
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/swagger.json b/huawei/vnfmadapter/VnfmadapterService/service/src/main/resources/swagger.json
new file mode 100644 (file)
index 0000000..aa3bf1f
--- /dev/null
@@ -0,0 +1,608 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "Huawei VNFM Driver API",
+    "description": "VNF service provider.",
+    "version": "1.0.0"
+  },
+  "tags": [
+        {
+            "name": "Huawei VNFM Driver services"
+        }
+    ],
+  "basePath": "/openoapi",
+  "paths": {
+    "/{vnfmtype}/v1/{vnfmid}/vnfs": {
+      "post": {
+        "summary": "Instantiate VNF",
+        "description": "Add VNF",
+        "consumes": [
+          "application/json"
+        ],
+        "produces": [
+          "application/json"
+        ],
+        "parameters": [
+          {
+            "name": "vnfmtype",
+            "in": "path",
+            "description": "vnfm type",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "vnfmid",
+            "in": "path",
+            "description": "vnfm id",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "in": "body",
+            "name": "vnf",
+            "description": "Provide required properties of VNF.",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/Vnf"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "VNF Response",
+            "schema": {
+              "$ref": "#/definitions/VnfResponse"
+            }
+          },
+          "401": {
+            "description": "Unauthorized"
+          },
+          "404": {
+            "description": "VNF Not Found"
+          },
+          "500": {
+            "description": "VNF service failed to process the request",
+            "schema": {
+              "$ref": "#/definitions/Error"
+            }
+          }
+        }
+      }
+    },
+    "/{vnfmtype}/v1/{vnfmid}/vnfs/{vnfInstanceId}/terminate": {
+      "post": {
+        "summary": "Terminate VNF",
+        "description": "Delete VNF",
+        "consumes": [
+          "application/json"
+        ],
+        "produces": [
+          "application/json"
+        ],
+        "parameters": [
+          {
+            "name": "vnfmtype",
+            "in": "path",
+            "description": "vnfm type",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "vnfmid",
+            "in": "path",
+            "description": "vnfm id",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "vnfInstanceId",
+            "in": "path",
+            "description": "vnfm instance id",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "in": "body",
+            "name": "vnfTerminate",
+            "description": "Provide required properties of VNF.",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/VnfTerminate"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "VNF Response",
+            "schema": {
+              "$ref": "#/definitions/VnfTerminateResponse"
+            }
+          },
+          "401": {
+            "description": "Unauthorized"
+          },
+          "404": {
+            "description": "VNF Not Found"
+          },
+          "500": {
+            "description": "VNF service failed to process the request",
+            "schema": {
+              "$ref": "#/definitions/Error"
+            }
+          }
+        }
+      }
+    },
+    "/{vnfmtype}/v1/{vnfmid}/vnfs/{vnfInstanceId}": {
+      "get": {
+        "summary": "Query VNF",
+        "description": "Get VNF Details",
+        "consumes": [
+          "application/json"
+        ],
+        "produces": [
+          "application/json"
+        ],
+        "parameters": [
+          {
+            "name": "vnfmtype",
+            "in": "path",
+            "description": "vnfm type",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "vnfmid",
+            "in": "path",
+            "description": "vnfm id",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "vnfInstanceId",
+            "in": "path",
+            "description": "vnfm instance id",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "VNF Response",
+            "schema": {
+              "$ref": "#/definitions/VnfInfoResponse"
+            }
+          },
+          "401": {
+            "description": "Unauthorized"
+          },
+          "404": {
+            "description": "VNF Not Found"
+          },
+          "500": {
+            "description": "VNF service failed to process the request",
+            "schema": {
+              "$ref": "#/definitions/Error"
+            }
+          }
+        }
+      }
+    },
+    "/{vnfmtype}/v1/jobs/{jobid}": {
+      "get": {
+        "summary": "Get VNF operational status",
+        "description": "VNF operational status",
+        "consumes": [
+          "application/json"
+        ],
+        "produces": [
+          "application/json"
+        ],
+        "parameters": [
+          {
+            "name": "vnfmtype",
+            "in": "path",
+            "description": "vnfm type",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "jobid",
+            "in": "path",
+            "description": "jobid",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "responseId",
+            "in": "query",
+            "description": "vnfm response id",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "VNF Response",
+            "schema": {
+              "$ref": "#/definitions/VnfStatusResponse"
+            }
+          },
+          "401": {
+            "description": "Unauthorized"
+          },
+          "404": {
+            "description": "VNF Not Found"
+          },
+          "500": {
+            "description": "VNF service failed to process the request",
+            "schema": {
+              "$ref": "#/definitions/Error"
+            }
+          }
+        }
+      }
+    }
+  },
+  "definitions": {
+    "VnfStatusResponse": {
+      "type": "object",
+      "description": "Operational Status Response.",
+      "required": [
+        "jobId",
+        "responseDescriptor",
+        "status",
+        "progress",
+        "statusDescription",
+        "errorCode",
+        "responseId",
+        "responseHistoryList"
+      ],
+      "properties": {
+        "jobId": {
+          "type": "string",
+          "description": "Job ID"
+        },
+        "responseDescriptor": {
+          "type": "string",
+          "description": "Including vnfStatus,statusDescription,errorCode,progress,responseHistoryList,responseId."
+        },
+        "status": {
+          "type": "string",
+          "description": "JOB status started processing finished error"
+        },
+        "progress": {
+          "type": "integer",
+          "description": "Progress (1 - 100)"
+        },
+        "statusDescription": {
+          "type": "string",
+          "description": "Progress Description"
+        },
+        "errorCode": {
+          "type": "integer",
+          "description": "Errorcode"
+        },
+        "responseId": {
+          "type": "integer",
+          "description": "Response Identifier"
+        },
+        "responseHistoryList": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/HistoryDetails"
+          }
+        }
+      }
+    },
+    "HistoryDetails": {
+      "type": "object",
+      "description": "InitiateVnfResponse.",
+      "required": [
+        "vnfStatus",
+        "statusDescription",
+        "errorCode",
+        "progress",
+        "responseId"
+      ],
+      "properties": {
+        "vnfStatus": {
+          "type": "string",
+          "description": "Vnf Job Status."
+        },
+        "statusDescription": {
+          "type": "string",
+          "description": "Progress Description."
+        },
+        "errorCode": {
+          "type": "integer",
+          "description": "Error code."
+        },
+        "progress": {
+          "type": "integer",
+          "description": "progress (1-100)."
+        },
+        "responseId": {
+          "type": "integer",
+          "description": "Response Identifier."
+        }
+      }
+    },
+    "VnfResponse": {
+      "type": "object",
+      "description": "InitiateVnfResponse.",
+      "required": [
+        "jobId",
+        "vnfInstanceId"
+      ],
+      "properties": {
+        "jobId": {
+          "type": "string",
+          "description": "Identifier of the VNF lifecycle operation occurrence."
+        },
+        "vnfInstanceId": {
+          "type": "string",
+          "description": "Identifier of the VNF instance."
+        }
+      }
+    },
+    "VnfTerminateResponse": {
+      "type": "object",
+      "description": "TerminateVnfResponse.",
+      "required": [
+        "jobId"
+      ],
+      "properties": {
+        "jobId": {
+          "type": "string",
+          "description": "Identifier of the VNF lifecycle operation occurrence."
+        }
+      }
+    },
+    "VnfInfoResponse": {
+      "type": "object",
+      "description": "The information items about the selected VNF instance(s) that are returned..",
+      "required": [
+        "VnfInfo"
+      ],
+      "properties": {
+        "VnfInfo": {
+          "$ref": "#/definitions/VnfInfo"
+        }
+      }
+    },
+    "VnfInfo": {
+      "type": "object",
+      "description": "The information items about the selected VNF instance(s) that are returned..",
+      "required": [
+        "vnfInstanceId",
+        "vnfInstanceName",
+        "vnfInstanceDescription",
+        "vnfdId",
+        "vnfPackageId",
+        "version",
+        "vnfProvider",
+        "vnfType",
+        "vnfStatus"
+      ],
+      "properties": {
+        "vnfInstanceId": {
+          "type": "string",
+          "description": "VNF instance identifier."
+        },
+        "vnfInstanceName": {
+          "type": "string",
+          "description": "VNF instance name."
+        },
+        "vnfInstanceDescription": {
+          "type": "string",
+          "description": "Human-readable description of the VNF instance."
+        },
+        "vnfdId": {
+          "type": "string",
+          "description": "Identifier of the VNFD on which the VNF instance is based."
+        },
+        "vnfPackageId": {
+          "type": "string",
+          "description": "Identifier of the VNF Package used to manage the lifecycle of the VNF instance."
+        },
+        "version": {
+          "type": "string",
+          "description": "Version of the VNF."
+        },
+        "vnfProvider": {
+          "type": "string",
+          "description": "Name of the person or company providing the VNF."
+        },
+        "vnfType": {
+          "type": "string",
+          "description": "VNF Application Type."
+        },
+        "vnfStatus": {
+          "default": "active",
+          "enum": [
+            "inactive",
+            "active"
+          ],
+          "description": "The instantiation state of the VNF. Possible values:INACTIVE (Vnf is terminated or not instantiated ), ACTIVE (Vnf is instantiated). [instantiationState]."
+        }
+      }
+    },
+    "VnfTerminate": {
+      "type": "object",
+      "description": "Terminate VNF.",
+      "required": [
+        "terminationType",
+        "gracefulTerminationTimeout"
+      ],
+      "properties": {
+        "terminationType": {
+          "default": "forceful",
+          "enum": [
+            "forceful",
+            "graceful"
+          ],
+          "description": "Signals whether forceful or graceful termination is requested.."
+        },
+        "gracefulTerminationTimeout": {
+          "type": "integer",
+          "format": "int32",
+          "description": "The time interval (second) to wait for the VNF to be taken out of service during graceful termination, before shutting down the VNF and releasing the resources."
+        }
+      }
+    },
+    "Vnf": {
+      "type": "object",
+      "description": "VNF encapsulate an external IP for the given project in a domain. Each property description is provided with 1. required 2. update allowed 3. format. whenever its needs to be mentioned explicitly.",
+      "required": [
+        "vnfInstanceName",
+        "vnfPackageId",
+        "vnfDescriptorId",
+        "flavourId",
+        "vnfInstanceDescription",
+        "extVirtualLink"
+      ],
+      "properties": {
+        "vnfInstanceName": {
+          "type": "string",
+          "description": "Human-readable name of the VNF instance to be created.."
+        },
+        "vnfPackageId": {
+          "type": "string",
+          "description": "VNF packageId."
+        },
+        "vnfDescriptorId": {
+          "type": "string",
+          "description": "Information sufficient to identify the VNF Descriptor which defines the VNF to be created."
+        },
+        "flavourId": {
+          "type": "string",
+          "description": "verify."
+        },
+        "vnfInstanceDescription": {
+          "type": "string",
+          "description": "Human-readable description of the VNF instance to be created."
+        },
+        "extVirtualLink": {
+          "$ref": "#/definitions/ExtVirtualLinkData"
+        }
+      }
+    },
+    "ExtVirtualLinkData": {
+      "type": "object",
+      "description": "References to external virtual links to connect the VNF to.",
+      "required": [
+        "vlInstanceId",
+        "vim",
+        "networkId",
+        "cpdId"
+      ],
+      "properties": {
+        "vlInstanceId": {
+          "type": "string",
+          "description": "Identifier of the VL instance."
+        },
+        "vim": {
+          "$ref": "#/definitions/VimInfo"
+        },
+        "networkId": {
+          "type": "string",
+          "description": "The network UUID of network"
+        },
+        "cpdId": {
+          "type": "string",
+          "description": "Identifier of the external CPD in VNFD"
+        }
+      }
+    },
+    "VimInfo": {
+      "type": "object",
+      "description": "Information about the VIM that manages this resource.",
+      "required": [
+        "vimInfoId",
+        "vimId",
+        "interfaceInfo",
+        "accessInfo",
+        "interfaceEndpoint"
+      ],
+      "properties": {
+        "vimInfoId": {
+          "type": "string",
+          "description": "The identifier of this VimInfo instance, for the purpose of referencing it from other information elements."
+        },
+        "vimId": {
+          "type": "string",
+          "description": "The identifier of the VIM.."
+        },
+        "interfaceInfo": {
+          "$ref": "#/definitions/interfaceInfo"
+        },
+        "accessInfo": {
+          "$ref": "#/definitions/accessInfo"
+        },
+        "interfaceEndpoint": {
+          "type": "string",
+          "description": "Information about the interface endpoint. An example is a URL."
+        }
+      }
+    },
+    "interfaceInfo": {
+      "type": "object",
+      "description": "Information about the interface to the VIM, including VIM provider type, API version, and protocol type..",
+      "required": [
+        "vimType",
+        "apiVersion",
+        "protocolType"
+      ],
+      "properties": {
+        "vimType": {
+          "type": "string",
+          "description": "vim"
+        },
+        "apiVersion": {
+          "type": "string",
+          "description": "api version"
+        },
+        "protocolType": {
+          "type": "string",
+          "description": "Type of the protocol"
+        }
+      }
+    },
+    "accessInfo": {
+      "type": "object",
+      "description": "Authentication credentials for accessing the VIM. Examples may include those to support different authentication schemes, e.g., OAuth, Token, etc..",
+      "required": [
+        "tenant",
+        "username",
+        "password"
+      ],
+      "properties": {
+        "tenant": {
+          "type": "string",
+          "description": "Tenant Name of tenant"
+        },
+        "username": {
+          "type": "string",
+          "description": "Username for login"
+        },
+        "password": {
+          "type": "string",
+          "description": "Password of login user"
+        }
+      }
+    },
+    "Error": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/webapp/WEB-INF/web.xml b/huawei/vnfmadapter/VnfmadapterService/service/src/main/webapp/WEB-INF/web.xml
new file mode 100644 (file)
index 0000000..eef98c0
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright 2016, Huawei Technologies Co., Ltd.
+
+    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.
+ -->
+
+<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
+        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
+  <servlet>
+    <servlet-name>CXFServlet</servlet-name>
+    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
+    <load-on-startup>1</load-on-startup>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>CXFServlet</servlet-name>
+    <url-pattern>/*</url-pattern>
+  </servlet-mapping>
+  <listener>
+    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+  </listener>
+  <context-param>
+    <param-name>contextConfigLocation</param-name>
+    <param-value>WEB-INF/classes/spring/Vnfmadapter/*.xml
+        </param-value>
+  </context-param>
+
+    <session-config>
+        <session-timeout>10000000</session-timeout>
+    </session-config>
+
+  <display-name>vnfmadapter-service</display-name>
+
+
+  <welcome-file-list>
+        <welcome-file>index.html</welcome-file>
+    </welcome-file-list>
+
+</web-app>
\ No newline at end of file
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/DownloadCsarManagerTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/DownloadCsarManagerTest.java
new file mode 100644 (file)
index 0000000..85ac321
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+package org.openo.nfvo.vnfmadapter.common;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.ProtocolVersion;
+import org.apache.http.StatusLine;
+import org.apache.http.message.BasicHttpResponse;
+import org.apache.http.message.BasicStatusLine;
+import org.junit.Test;
+import org.springframework.mock.web.MockHttpServletRequest;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Created by QuanZhong on 2017/3/17.
+ */
+public class DownloadCsarManagerTest {
+
+    @Test
+    public void getFileNameTest(){
+        ProtocolVersion version = new ProtocolVersion("HTTP",1,1);
+        StatusLine sl = new BasicStatusLine(version,200,"success");
+        HttpResponse response = new BasicHttpResponse(sl);
+        response.setHeader("Content-Disposition","filename");
+        DownloadCsarManager.getFileName(response);
+    }
+
+    @Test
+    public void downloadTest(){
+        DownloadCsarManager.download("http://www.baidu.com");
+        DownloadCsarManager.download("http://www.baidu.com","/opt");
+        DownloadCsarManager.getRandomFileName();
+    }
+    @Test
+    public void getFilePath(){
+        ProtocolVersion version = new ProtocolVersion("HTTP",1,1);
+        StatusLine sl = new BasicStatusLine(version,200,"success");
+        HttpResponse response = new BasicHttpResponse(sl);
+        response.setHeader("Content-Disposition","filename");
+        DownloadCsarManager.getFilePath(response);
+    }
+    @Test
+    public void testUnzip(){
+        DownloadCsarManager.unzipCSAR("test.zip","/opt");
+    }
+
+    @Test
+    public void testJsonUtils(){
+        MockHttpServletRequest req = new MockHttpServletRequest();
+        req.setContent("[{'abc':123}]".getBytes());
+        VnfmJsonUtil.getJsonFromContexts(req);
+    }
+    @Test
+    public void testJsonUtils2(){
+        MockHttpServletRequest req = new MockHttpServletRequest();
+        req.setContent("{'abc':123}".getBytes());
+        VnfmJsonUtil.getJsonFromContexts(req);
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/FileUtil.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/FileUtil.java
new file mode 100644 (file)
index 0000000..10f2435
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+
+public class FileUtil {
+
+    public static String ReadFile(String path) {
+        File file = new File(path);
+        BufferedReader reader = null;
+        String laststr = "";
+        try {
+            reader = new BufferedReader(new FileReader(file));
+            String tempString = null;
+            while((tempString = reader.readLine()) != null) {
+                laststr = laststr + tempString;
+            }
+            reader.close();
+        } catch(IOException e) {
+            e.printStackTrace();
+        } finally {
+            if(reader != null) {
+                try {
+                    reader.close();
+                } catch(IOException e1) {
+                }
+            }
+        }
+        return laststr;
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/ResultRequestUtilTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/ResultRequestUtilTest.java
new file mode 100644 (file)
index 0000000..1e8a9f3
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.service.csm.connect.ConnectMgrVnfm;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONObject;
+
+public class ResultRequestUtilTest {
+
+    @Test
+    public void callTestInternalError(){
+        new MockUp<ConnectMgrVnfm>(){
+            @Mock
+            public int connect(JSONObject vnfmObj) {
+                return 500;
+            }
+        };
+        JSONObject vnfmObject = new JSONObject();;
+        String path = "http://localhost:8080";
+        String methodName = "get";
+        String paramsJson = "";
+        JSONObject resp = ResultRequestUtil.call(vnfmObject, path, methodName, paramsJson);
+        assertTrue(resp.get("data").equals("connect fail."));
+    }
+
+    @Test
+    public void callTestConnectionErrot(){
+        new MockUp<ConnectMgrVnfm>(){
+            @Mock
+            public int connect(JSONObject vnfmObj) {
+                return 200;
+            }
+        };
+        JSONObject vnfmObject = new JSONObject();
+        vnfmObject.put("url", "/test/123");
+        String path = "http://localhost:8080";
+        String methodName = "get";
+        String paramsJson = "";
+        JSONObject resp = ResultRequestUtil.call(vnfmObject, path, methodName, paramsJson);
+        assertTrue(resp.get("data").equals("get connection error"));
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/VnfmUtilTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/VnfmUtilTest.java
new file mode 100644 (file)
index 0000000..fa60eb4
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VnfmRestfulUtil;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+public class VnfmUtilTest {
+
+    @Test
+    public void getVnfmByIdTestNullResp(){
+        JSONObject resp = VnfmUtil.getVnfmById("1234");
+        assertNull(resp);
+    }
+
+    @Test
+    public void getVnfmByIdTestSuccess(){
+        new MockUp<VnfmRestfulUtil>(){
+            @Mock
+            public RestfulResponse getRemoteResponse(String url, String methodType, String params) {
+                RestfulResponse resp = new RestfulResponse();
+                resp.setStatus(200);
+                return resp;
+            }
+        };
+        JSONObject resp = VnfmUtil.getVnfmById("1234");
+        assertNotNull(resp);
+    }
+
+    @Test
+    public void getVnfmIdByIpTestNullResp(){
+        String resp = VnfmUtil.getVnfmIdByIp("localhost");
+        assertTrue("".equals(resp));
+    }
+
+    @Test
+    public void getVnfmIdByIpTestSuccess(){
+        new MockUp<VnfmRestfulUtil>(){
+            @Mock
+            public RestfulResponse getRemoteResponse(String url, String methodType, String params) {
+                RestfulResponse resp = new RestfulResponse();
+                resp.setStatus(200);
+                JSONArray respArray = new JSONArray();
+                JSONObject obj = new JSONObject();
+                obj.put("url", "localhost");
+                obj.put("vnfmId", "1234");
+                respArray.add(obj);
+                resp.setResponseJson(respArray.toString());
+                return resp;
+            }
+        };
+        String resp = VnfmUtil.getVnfmIdByIp("localhost");
+        assertTrue("1234".equals(resp));
+    }
+
+    @Test
+    public void getVnfmIdByIpTestSuccessInvalidIP(){
+        new MockUp<VnfmRestfulUtil>(){
+            @Mock
+            public RestfulResponse getRemoteResponse(String url, String methodType, String params) {
+                RestfulResponse resp = new RestfulResponse();
+                resp.setStatus(200);
+                JSONArray respArray = new JSONArray();
+                JSONObject obj = new JSONObject();
+                obj.put("url", "127.0.0.1");
+                obj.put("vnfmId", "1234");
+                respArray.add(obj);
+                resp.setResponseJson(respArray.toString());
+                return resp;
+            }
+        };
+        String resp = VnfmUtil.getVnfmIdByIp("localhost");
+        assertTrue("".equals(resp));
+    }
+    @Test
+    public void getVnfmIdByIpTestSuccessEmptyResp(){
+        new MockUp<VnfmRestfulUtil>(){
+            @Mock
+            public RestfulResponse getRemoteResponse(String url, String methodType, String params) {
+                RestfulResponse resp = new RestfulResponse();
+                resp.setStatus(200);
+                JSONArray respArray = new JSONArray();
+                resp.setResponseJson(respArray.toString());
+                return resp;
+            }
+        };
+        String resp = VnfmUtil.getVnfmIdByIp("localhost");
+        assertTrue("".equals(resp));
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/servicetoken/HttpRestfulHelpTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/servicetoken/HttpRestfulHelpTest.java
new file mode 100644 (file)
index 0000000..a50dde9
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common.servicetoken;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.Test;
+import org.openo.baseservice.roa.util.restclient.Restful;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 10, 2016
+ */
+public class HttpRestfulHelpTest {
+
+    @Test
+    public void testGetRestInstance() {
+        Restful rest = HttpRestfulHelp.getRestInstance(null, null);
+        assertNotNull(rest);
+    }
+
+    @Test
+    public void testGetRestInstance1() {
+        HttpRestfulHelp.getRestInstance(null, null);
+        Restful rest = HttpRestfulHelp.getRestInstance(null, null);
+        assertNotNull(rest);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VNFRestfulUtilTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VNFRestfulUtilTest.java
new file mode 100644 (file)
index 0000000..3da7a81
--- /dev/null
@@ -0,0 +1,322 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common.servicetoken;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.testutils.JsonUtil;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONObject;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 10, 2016
+ */
+public class VNFRestfulUtilTest {
+
+    @Test
+    public void getRestResByDefaultTestGet(){
+        String path="http://localhost:8080";
+        String methodNames = "get";
+        JSONObject bodyParam = new JSONObject();
+        bodyParam.put("id", "1234");
+        RestfulResponse resp = VNFRestfulUtil.getRestResByDefault(path, methodNames, bodyParam);
+        assertNotNull(resp);
+    }
+
+    @Test
+    public void getRestResByDefaultTestDelete(){
+        String path="http://localhost:8080";
+        String methodNames = "delete";
+        JSONObject bodyParam = new JSONObject();
+        bodyParam.put("id", "1234");
+        RestfulResponse resp = VNFRestfulUtil.getRestResByDefault(path, methodNames, bodyParam);
+        assertNotNull(resp);
+    }
+    @Test
+    public void getRestResByDefaultTestPost(){
+        String path="http://localhost:8080";
+        String methodNames = "post";
+        JSONObject bodyParam = new JSONObject();
+        bodyParam.put("id", "1234");
+        RestfulResponse resp = VNFRestfulUtil.getRestResByDefault(path, methodNames, bodyParam);
+        assertNotNull(resp);
+    }
+
+    @Test
+    public void sendReqToAppTestNullResp(){
+        String path="http://localhost:8080";
+        String methodNames = "get";
+        JSONObject bodyParam = new JSONObject();
+        bodyParam.put("id", "1234");
+        JSONObject resp = VNFRestfulUtil.sendReqToApp(path, methodNames, bodyParam);
+        assertNotNull(resp);
+    }
+    @Test
+    public void sendReqToAppTest(){
+        new MockUp<VNFRestfulUtil>(){
+            @Mock
+            public RestfulResponse getRestResByDefault(String path, String methodNames, JSONObject bodyParam) {
+                RestfulResponse resp = new RestfulResponse();
+                resp.setStatus(200);
+                Map<String,Object> map = new HashMap<>();
+                map.put("retCode", 1);
+                resp.setResponseJson(toJson(map));
+                return resp;
+            }
+        };
+        String path="http://localhost:8080/vnfdmgr/v1";
+        String methodNames = "get";
+        JSONObject bodyParam = new JSONObject();
+        bodyParam.put("vnfmInfo", new JSONObject().put("id", "6775"));
+        JSONObject resp = VNFRestfulUtil.sendReqToApp(path, methodNames, bodyParam);
+        assertNotNull(resp);
+    }
+
+    @Test
+    public void sendReqToAppTest2(){
+        new MockUp<VNFRestfulUtil>(){
+            @Mock
+            public RestfulResponse getRestResByDefault(String path, String methodNames, JSONObject bodyParam) {
+                RestfulResponse resp = new RestfulResponse();
+                resp.setStatus(200);
+                Map<String,Object> map = new HashMap<>();
+                map.put("retCode", -1);
+                resp.setResponseJson(toJson(map));
+                return resp;
+            }
+        };
+        String path="http://localhost:8080/vnfdmgr/v1";
+        String methodNames = "get";
+        JSONObject bodyParam = new JSONObject();
+        bodyParam.put("vnfmInfo", new JSONObject().put("id", "6775"));
+        JSONObject resp = VNFRestfulUtil.sendReqToApp(path, methodNames, bodyParam);
+        assertNotNull(resp);
+    }
+    @Test
+    public void sendReqToAppTest3(){
+        new MockUp<VNFRestfulUtil>(){
+            @Mock
+            public RestfulResponse getRestResByDefault(String path, String methodNames, JSONObject bodyParam) {
+                RestfulResponse resp = new RestfulResponse();
+                resp.setStatus(500);
+                Map<String,Object> map = new HashMap<>();
+                map.put("retCode", -1);
+                resp.setResponseJson(toJson(map));
+                return resp;
+            }
+        };
+        String path="http://localhost:8080/vnfdmgr/v1";
+        String methodNames = "get";
+        JSONObject bodyParam = new JSONObject();
+        bodyParam.put("vnfmInfo", new JSONObject().put("id", "6775"));
+        JSONObject resp = VNFRestfulUtil.sendReqToApp(path, methodNames, bodyParam);
+        assertNotNull(resp);
+    }
+
+    @Test
+    public void getRemoteResponseTest(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "delete");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+
+        boolean isNfvoApp = false;
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(paramsMap, "", "test123", isNfvoApp);
+        assertNull(resp);
+    }
+
+    @Test
+    public void getRemoteResponse2Test(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "get");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+
+        boolean isNfvoApp = false;
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(paramsMap, "", "test123", isNfvoApp);
+        assertNull(resp);
+    }
+
+    @Test
+    public void getRemoteResponse3Test(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "post");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+
+        boolean isNfvoApp = false;
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(paramsMap, "", "test123", isNfvoApp);
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponse4Test(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "put");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+
+        boolean isNfvoApp = false;
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(paramsMap, "", "test123", isNfvoApp);
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponse5Test(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "patch");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+        boolean isNfvoApp = false;
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(paramsMap, "", "test123", isNfvoApp);
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponseTrueTest(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "patch");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+        boolean isNfvoApp = true;
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(paramsMap, "", "test123", isNfvoApp);
+        assertNull(resp);
+    }
+
+    @Test
+    public void getRemoteResponseDeleteTest(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "delete");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(paramsMap, "");
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponseGetTest(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "get");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(paramsMap, "");
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponsePostTest(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "post");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(paramsMap, "");
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponsePutTest(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "put");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(paramsMap, "");
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponsePatchTest(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "patch");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(paramsMap, "");
+        assertNull(resp);
+    }
+
+    @Test
+    public void getRemoteResponseNullTest(){
+
+        RestfulResponse resp = VNFRestfulUtil.getRemoteResponse(null, "");
+        assertNull(resp);
+    }
+    @Test
+    public void generateParamsMapTest(){
+        String url = "/test/123";
+        String methodType="get";
+        String path="http://localhost:8080";
+        String authMode="test";
+        Map<String, String> res = VNFRestfulUtil.generateParamsMap(url, methodType, path, authMode);
+        assertTrue(res.get("url").equals("/test/123"));
+    }
+
+    @Test
+    public void generateParams2MapTest(){
+        String url = "/test/123";
+        String methodType="get";
+        String path="http://localhost:8080";
+        Map<String, String> res = VNFRestfulUtil.generateParamsMap(url, methodType, path);
+        assertTrue(res.get("url").equals("/test/123"));
+    }
+    @Test
+    public void getResultToVnfmTest(){
+        JSONObject vnfmInfo= new JSONObject();
+        vnfmInfo.put("retCode", 1);
+        String vnfmId="123";
+        JSONObject res = VNFRestfulUtil.getResultToVnfm(vnfmInfo, vnfmId);
+        assertNotNull(res);
+    }
+
+    @Test
+    public void getResultToVnfm2Test(){
+        JSONObject vnfmInfo= new JSONObject();
+        vnfmInfo.put("retCode", -1);
+        String vnfmId="123";
+        JSONObject res = VNFRestfulUtil.getResultToVnfm(vnfmInfo, vnfmId);
+        assertNotNull(res);
+    }
+
+    public static String toJson(Map o) {
+        try {
+            return JsonUtil.marshal(o);
+        } catch (IOException e) {
+            return "";
+        }
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VnfmRestfulUtilTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/common/servicetoken/VnfmRestfulUtilTest.java
new file mode 100644 (file)
index 0000000..d03b39c
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.common.servicetoken;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONObject;
+
+public class VnfmRestfulUtilTest {
+    @Test
+    public void testGetRestResByDefaultByNull() {
+        RestfulResponse result = VnfmRestfulUtil.getRestResByDefault("path", "methodNames", new JSONObject());
+        assertNull(result);
+    }
+
+    @Test
+    public void testGetRestResByDefaultByGet() {
+        RestfulResponse result = VnfmRestfulUtil.getRestResByDefault("path", "get", new JSONObject());
+        assertNotNull(result);
+    }
+
+    @Test
+    public void testGetRestResByDefaultByPut() {
+        RestfulResponse result = VnfmRestfulUtil.getRestResByDefault("path", "put", new JSONObject());
+        assertNotNull(result);
+    }
+
+    @Test
+    public void testSendReqToApp() {
+        new MockUp<VnfmRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRestResByDefault(String path, String methodNames, JSONObject bodyParam) {
+                RestfulResponse restfulResponse = new RestfulResponse();
+                restfulResponse.setStatus(Constant.HTTP_OK);
+                String responseString = "{\"retCode\":1,\"data\":\"success\"}";
+                restfulResponse.setResponseJson(responseString);
+                return restfulResponse;
+            }
+        };
+        JSONObject result = VnfmRestfulUtil.sendReqToApp("path", "put", new JSONObject());
+        assertEquals(Constant.REST_SUCCESS, result.get("retCode"));
+    }
+
+    @Test
+    public void testSendReqToAppByErrorMsg() {
+        new MockUp<VnfmRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRestResByDefault(String path, String methodNames, JSONObject bodyParam) {
+                RestfulResponse restfulResponse = new RestfulResponse();
+                restfulResponse.setStatus(Constant.HTTP_OK);
+                String responseString = "{\"retCode\":-1,\"data\":\"fail\",\"msg\":\"fail\"}";
+                restfulResponse.setResponseJson(responseString);
+                return restfulResponse;
+            }
+        };
+        JSONObject result = VnfmRestfulUtil.sendReqToApp("path", "put", new JSONObject());
+        assertEquals(Constant.REST_FAIL, result.get("retCode"));
+    }
+
+    @Test
+    public void testSendReqToAppByError() {
+        new MockUp<VnfmRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRestResByDefault(String path, String methodNames, JSONObject bodyParam) {
+                RestfulResponse restfulResponse = new RestfulResponse();
+                restfulResponse.setStatus(Constant.HTTP_OK);
+                String responseString = "{\"retCode\":-1,\"data\":\"fail\"}";
+                restfulResponse.setResponseJson(responseString);
+                return restfulResponse;
+            }
+        };
+        JSONObject result = VnfmRestfulUtil.sendReqToApp("path", "put", new JSONObject());
+        assertEquals(Constant.REST_FAIL, result.get("retCode"));
+    }
+
+    @Test
+    public void testSendReqToAppByFail() {
+        JSONObject result = VnfmRestfulUtil.sendReqToApp("path", "put", new JSONObject());
+        assertEquals(Constant.REST_FAIL, result.get("retCode"));
+    }
+
+    @Test
+    public void testSendReqToAppByVnfmInfo() {
+        JSONObject paraJson = new JSONObject();
+        JSONObject vnfmObj = new JSONObject();
+        vnfmObj.put("id", "id");
+        paraJson.put("vnfmInfo", vnfmObj);
+        JSONObject result = VnfmRestfulUtil.sendReqToApp("path", "put", paraJson);
+        assertEquals(Constant.REST_FAIL, result.get("retCode"));
+    }
+
+    @Test
+    public void testGenerateParamsMap2() {
+        Map<String, String> result = VnfmRestfulUtil.generateParamsMap("url", "methodType", "path", "authMode");
+        Map<String, String> paramsMap = new HashMap<String, String>(6);
+        paramsMap.put("url", "url");
+        paramsMap.put("methodType", "methodType");
+        paramsMap.put("path", "path");
+        paramsMap.put("authMode", "authMode");
+        assertEquals(paramsMap, result);
+    }
+    @Test
+    public void getRemoteResponseTestGet(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "get");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+        boolean isNfvoApp = false;
+        RestfulResponse resp = VnfmRestfulUtil.getRemoteResponse(paramsMap, "", "test123", isNfvoApp);
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponseTestGetTrueNfvo(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "get");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+        boolean isNfvoApp = true;
+        RestfulResponse resp = VnfmRestfulUtil.getRemoteResponse(paramsMap, "", "test123", isNfvoApp);
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponseTestPost(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "post");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+
+        boolean isNfvoApp = false;
+        RestfulResponse resp = VnfmRestfulUtil.getRemoteResponse(paramsMap, "", "test123", isNfvoApp);
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponseTestPut(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "put");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+
+        boolean isNfvoApp = false;
+        RestfulResponse resp = VnfmRestfulUtil.getRemoteResponse(paramsMap, "", "test123", isNfvoApp);
+        assertNull(resp);
+    }
+
+    @Test
+    public void getRemoteResponseTestDelete(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "delete");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+
+        boolean isNfvoApp = false;
+        RestfulResponse resp = VnfmRestfulUtil.getRemoteResponse(paramsMap, "", "test123", isNfvoApp);
+        assertNull(resp);
+    }
+
+    @Test
+    public void getRemoteResponse2TestDelete(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "delete");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+        RestfulResponse resp = VnfmRestfulUtil.getRemoteResponse("/test/123", "", "test123");
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponse2TestGet(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "get");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+        RestfulResponse resp = VnfmRestfulUtil.getRemoteResponse("/test/123", "", "test123");
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponse2Testput(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "put");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "test");
+        RestfulResponse resp = VnfmRestfulUtil.getRemoteResponse("/test/123", "", "test123");
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponse2TestPost(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "put");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "post");
+        RestfulResponse resp = VnfmRestfulUtil.getRemoteResponse("/test/123", "", "test123");
+        assertNull(resp);
+    }
+    @Test
+    public void getRemoteResponse2TestPatch(){
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/123");
+        paramsMap.put("methodType", "patch");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("authMode", "post");
+        RestfulResponse resp = VnfmRestfulUtil.getRemoteResponse("/test/123", "", "test123");
+        assertNull(resp);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/activator/RoaVnfmServicePostProcessorTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/activator/RoaVnfmServicePostProcessorTest.java
new file mode 100644 (file)
index 0000000..82d8c2b
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+package org.openo.nfvo.vnfmadapter.service.activator;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.service.api.internalsvc.impl.VnfmAdapterMgrService;
+
+/**
+ * Created by QuanZhong on 2017/3/17.
+ */
+public class RoaVnfmServicePostProcessorTest {
+    @Test
+    public void testPostProcessAfterInitialization(){
+        RoaVnfmServicePostProcessor dm = new RoaVnfmServicePostProcessor();
+        dm.postProcessAfterInitialization(new VnfmAdapterMgrService(),"abc");
+        Assert.assertTrue(true);
+    }
+    @Test
+    public void testPostProcessAfterInitialization2(){
+        RoaVnfmServicePostProcessor dm = new RoaVnfmServicePostProcessor();
+        dm.postProcessAfterInitialization(null,"abc");
+        Assert.assertTrue(true);
+    }
+
+    @Test
+    public void testpostProcessBeforeDestruction(){
+        RoaVnfmServicePostProcessor dm = new RoaVnfmServicePostProcessor();
+        dm.postProcessBeforeDestruction(new VnfmAdapterMgrService(),"abc");
+        Assert.assertTrue(true);
+    }
+
+    @Test
+    public void testpostProcessBeforeInitialization(){
+        RoaVnfmServicePostProcessor dm = new RoaVnfmServicePostProcessor();
+        dm.postProcessBeforeInitialization(new VnfmAdapterMgrService(),"abc");
+        Assert.assertTrue(true);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/activator/TestRoaVnfmService2DriverMgr.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/activator/TestRoaVnfmService2DriverMgr.java
new file mode 100644 (file)
index 0000000..f75f4e4
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+package org.openo.nfvo.vnfmadapter.service.activator;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.service.api.internalsvc.impl.VnfmAdapter2DriverMgrService;
+
+/**
+ * Created by QuanZhong on 2017/3/17.
+ */
+public class TestRoaVnfmService2DriverMgr {
+    @Test
+    public void testPostProcessAfterInitialization(){
+        RoaVnfmService2DriverMgr dm = new RoaVnfmService2DriverMgr();
+        dm.postProcessAfterInitialization(new VnfmAdapter2DriverMgrService(),"abc");
+        Assert.assertTrue(true);
+    }
+    @Test
+    public void testPostProcessAfterInitialization2(){
+        RoaVnfmService2DriverMgr dm = new RoaVnfmService2DriverMgr();
+        dm.postProcessAfterInitialization(null,"abc");
+        Assert.assertTrue(true);
+    }
+
+    @Test
+    public void testpostProcessBeforeDestruction(){
+        RoaVnfmService2DriverMgr dm = new RoaVnfmService2DriverMgr();
+        dm.postProcessBeforeDestruction(new VnfmAdapter2DriverMgrService(),"abc");
+        Assert.assertTrue(true);
+    }
+
+    @Test
+    public void testpostProcessBeforeInitialization(){
+        RoaVnfmService2DriverMgr dm = new RoaVnfmService2DriverMgr();
+        dm.postProcessBeforeInitialization(new VnfmAdapter2DriverMgrService(),"abc");
+        Assert.assertTrue(true);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/AdapterResourceManagerTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/AdapterResourceManagerTest.java
new file mode 100644 (file)
index 0000000..895c167
--- /dev/null
@@ -0,0 +1,311 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.adapter.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.DownloadCsarManager;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VNFRestfulUtil;
+import org.openo.nfvo.vnfmadapter.testutils.JsonUtil;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+
+public class AdapterResourceManagerTest {
+
+    AdapterResourceManager manager = null;
+
+    @Before
+    public void setUp() {
+        manager = new AdapterResourceManager();
+    }
+
+    @Test(expected = JSONException.class)
+    public void uploadVNFPackageTestJsonException() {
+        JSONObject vnfpkg = new JSONObject();
+        Map<String, String> paramsMap = new HashMap<>();
+        JSONObject res = manager.uploadVNFPackage(vnfpkg, paramsMap);
+        assertTrue(res != null);
+
+    }
+
+    @Test(expected = JSONException.class)
+    public void uploadVNFPackageTestJsonException2() {
+        JSONObject vnfpkg = new JSONObject();
+        Map<String, String> paramsMap = new HashMap<>();
+        JSONObject res = manager.uploadVNFPackage(null, paramsMap);
+        assertTrue(res != null);
+
+    }
+
+    @Test
+    public void uploadVNFPackageTestJsonException3() {
+        JSONObject vnfpkg = new JSONObject();
+        vnfpkg.put("name", "test");
+        Map<String, String> paramsMap = new HashMap<>();
+        JSONObject res = manager.uploadVNFPackage(vnfpkg, paramsMap);
+        assertTrue(res.get("reason").equals("csarid and vnfmid are null."));
+
+    }
+
+    @Test
+    public void uploadVNFPackageTestEmptyParam() {
+        JSONObject vnfpkg = new JSONObject();
+        vnfpkg.put("name", "test");
+        Map<String, String> paramsMap = new HashMap<>();
+        JSONObject res = manager.uploadVNFPackage(vnfpkg, paramsMap);
+        assertTrue(res.get("reason").equals("csarid and vnfmid are null."));
+
+    }
+
+    @Test
+    public void uploadVNFPackageTestNullParam() {
+        JSONObject vnfpkg = new JSONObject();
+        vnfpkg.put("name", "test");
+        Map<String, String> paramsMap = new HashMap<>();
+        JSONObject res = manager.uploadVNFPackage(vnfpkg, null);
+        assertTrue(res.get("reason").equals("csarid and vnfmid are null."));
+
+    }
+
+    @Test
+    public void uploadVNFPackageTestInvalidCsrid() {
+        JSONObject vnfpkg = new JSONObject();
+        vnfpkg.put("name", "test");
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("csarid", "");
+        JSONObject res = manager.uploadVNFPackage(vnfpkg, paramsMap);
+        assertTrue(res.get("reason").equals("csarid is null."));
+
+    }
+
+    @Test
+    public void uploadVNFPackageTestInvalidCsrid2() {
+        JSONObject vnfpkg = new JSONObject();
+        vnfpkg.put("name", "test");
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("csarid", null);
+        JSONObject res = manager.uploadVNFPackage(vnfpkg, paramsMap);
+        assertTrue(res.get("reason").equals("csarid is null."));
+
+    }
+
+    @Test
+    public void uploadVNFPackageTestInvalidVnfmid() {
+        JSONObject vnfpkg = new JSONObject();
+        vnfpkg.put("name", "test");
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("csarid", "csarid123");
+        paramsMap.put("vnfmid", null);
+        JSONObject res = manager.uploadVNFPackage(vnfpkg, paramsMap);
+        assertTrue(res.get("reason").equals("vnfmid is null."));
+
+    }
+
+    @Test
+    public void uploadVNFPackageTestInvalidVnfmid2() {
+        JSONObject vnfpkg = new JSONObject();
+        vnfpkg.put("name", "test");
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("csarid", "csarid123");
+        paramsMap.put("vnfmid", "");
+        JSONObject res = manager.uploadVNFPackage(vnfpkg, paramsMap);
+        assertTrue(res.get("reason").equals("vnfmid is null."));
+
+    }
+
+    @Test
+    public void uploadVNFPackageTestNullResp() {
+        JSONObject vnfpkg = new JSONObject();
+        vnfpkg.put("name", "test");
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("csarid", "csarid123");
+        paramsMap.put("vnfmid", "vnfmid1234");
+        JSONObject res = manager.uploadVNFPackage(vnfpkg, paramsMap);
+        assertTrue(res.get("reason").equals("RestfulResponse is null."));
+
+    }
+
+    @Test
+    public void downloadCsarTestNullUrl() {
+        String url = null;
+        String filePath = null;
+        JSONObject res = manager.downloadCsar(url, filePath);
+        assertTrue(res.get("reason").equals("url is null."));
+    }
+
+    @Test
+    public void downloadCsarTestEmptyUrl() {
+        String url = "";
+        String filePath = null;
+        JSONObject res = manager.downloadCsar(url, filePath);
+        assertTrue(res.get("reason").equals("url is null."));
+    }
+
+    @Test
+    public void downloadCsarTestNullFilePath() {
+        String url = "http://localhost:8080";
+        String filePath = null;
+        JSONObject res = manager.downloadCsar(url, filePath);
+        assertTrue(res.get("reason").equals("downloadUrl filePath is null."));
+    }
+
+    @Test
+    public void downloadCsarTestEmptyFilePath() {
+        String url = "http://localhost:8080";
+        String filePath = "";
+        JSONObject res = manager.downloadCsar(url, filePath);
+        assertTrue(res.get("reason").equals("downloadUrl filePath is null."));
+    }
+
+    @Test
+    public void getVnfmConnInfoTestSuccess() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse resp = new RestfulResponse();
+                resp.setStatus(200);
+                Map<String, String> objMap = new HashMap<String, String>();
+                objMap.put("id", "test123");
+
+                String responseString = toJson(objMap);
+                resp.setResponseJson(responseString);
+                return resp;
+            }
+
+        };
+        Map<String, String> paramsMap = new HashMap<String, String>();
+        JSONObject res = manager.getVnfmConnInfo(paramsMap);
+        assertTrue(res.get("id").equals("test123"));
+    }
+
+    @Test
+    public void getVnfmConnInfoTestNullResp() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+
+                return null;
+            }
+
+        };
+        Map<String, String> paramsMap = new HashMap<String, String>();
+        JSONObject res = manager.getVnfmConnInfo(paramsMap);
+        assertTrue(res.get("reason").equals("RestfulResponse is null."));
+    }
+
+    @Test
+    public void getVnfmConnInfoTestServerError() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse resp = new RestfulResponse();
+                resp.setStatus(500);
+                Map<String, String> objMap = new HashMap<String, String>();
+                objMap.put("id", "test123");
+
+                String responseString = toJson(objMap);
+                resp.setResponseJson(responseString);
+                return resp;
+            }
+
+        };
+        Map<String, String> paramsMap = new HashMap<String, String>();
+        JSONObject res = manager.getVnfmConnInfo(paramsMap);
+        assertTrue(res.get("reason").equals("ESR return fail."));
+    }
+
+    @Test
+    public void uploadTestInternalError() {
+        JSONObject vnfpackage = new JSONObject();
+        String vnfmurl = "http://localhost";
+        String conntoken = "test";
+        JSONObject res = manager.upload(vnfpackage, vnfmurl, conntoken);
+        assertEquals(res.get("retCode"), 500);
+    }
+
+    public static String toJson(Map o) {
+        try {
+            return JsonUtil.marshal(o);
+        } catch(IOException e) {
+            return "";
+        }
+    }
+
+    @Test
+    public void testGetAllCloud(){
+        String url = null;
+        manager.getAllCloud(url,null);
+    }
+
+    @Test
+    public void testGetAllCloud2(){
+        String url = "http://127.0.0.1:31943";
+        manager.getAllCloud(url,null);
+    }
+    @Test
+    public void testUnzipCSAR(){
+        manager.unzipCSAR(null,null);
+    }
+    @Test
+    public void testUnzipCSAR2(){
+        manager.unzipCSAR("vCpe.zip",null);
+    }
+    @Test
+    public void testUnzipCSAR3(){
+        manager.unzipCSAR("vCpe.zip","/opt");
+    }
+    @Test
+    public void testUnzipCSAR4(){
+        new MockUp<DownloadCsarManager>(){
+            @Mock
+            public  int unzipCSAR(String fileName,String filePath){
+                return 0;
+            }
+        };
+        manager.unzipCSAR("vCpe.zip","/opt");
+    }
+    @Test
+    public void testUnzipCSAR5(){
+        new MockUp<DownloadCsarManager>(){
+            @Mock
+            public  int unzipCSAR(String fileName,String filePath){
+                return -1;
+            }
+        };
+        manager.unzipCSAR("vCpe.zip","/opt");
+    }
+
+    @Test
+    public void testGetVnfdVersion(){
+        manager.getVnfdVersion("http://","127.0.0.1","token");
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/Driver2MSBManagerTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/Driver2MSBManagerTest.java
new file mode 100644 (file)
index 0000000..48a0411
--- /dev/null
@@ -0,0 +1,281 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.adapter.impl;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VNFRestfulUtil;
+import org.openo.nfvo.vnfmadapter.testutils.JsonUtil;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONObject;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 24, 2017
+ */
+public class Driver2MSBManagerTest {
+
+    Driver2MSBManager manager = new Driver2MSBManager();
+
+    Map<String, String> vim = new HashMap<String, String>();
+
+    @Before
+    public void setUp() {
+        vim.put("vimId", "123");
+        vim.put("name", "123");
+        vim.put("url", "123");
+        vim.put("userName", "123");
+        vim.put("password", "123");
+        vim.put("type", "123");
+        vim.put("version", "123");
+    }
+
+    @Test
+    public void registerDriverTestNullResp() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+
+                return null;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.registerDriver(paramsMap, new JSONObject());
+        assertTrue(obj.get("reason").equals("RestfulResponse is null."));
+    }
+
+    @Test
+    public void registerDriverCreateSuccess() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(201);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.registerDriver(paramsMap, new JSONObject());
+        assertTrue(Integer.valueOf(obj.get("retCode").toString()) == 201);
+    }
+
+    @Test
+    public void registerDriverOkSuccess() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(200);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.registerDriver(paramsMap, new JSONObject());
+        assertTrue(Integer.valueOf(obj.get("retCode").toString()) == -1);
+    }
+
+    @Test
+    public void registerDriverTestInvalidParams() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(415);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.registerDriver(paramsMap, new JSONObject());
+        assertTrue(obj.get("reason").equals("MSB return fail,invalid parameters."));
+    }
+
+    @Test
+    public void registerDriverTestInternalError() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(500);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.registerDriver(paramsMap, new JSONObject());
+        assertTrue(obj.get("reason").equals("MSB return fail,internal system error."));
+    }
+
+    @Test
+    public void unregisterDriverTestNullResp() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+
+                return null;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.unregisterDriver(paramsMap);
+        assertTrue(obj.get("reason").equals("RestfulResponse is null."));
+    }
+
+    @Test
+    public void unregisterDriverDeleteSuccess() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(204);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.unregisterDriver(paramsMap);
+        assertTrue(Integer.valueOf(obj.get("retCode").toString()) == 204);
+    }
+
+    @Test
+    public void unregisterDriverResourceNotFound() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(404);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.unregisterDriver(paramsMap);
+        assertTrue(obj.get("reason").equals("MSB return fail,can't find the service instance."));
+    }
+
+    @Test
+    public void unregisterDriverTestInvalidParams() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(415);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.unregisterDriver(paramsMap);
+        assertTrue(obj.get("reason").equals("MSB return fail,invalid parameters."));
+    }
+
+    @Test
+    public void unregisterDriverTestInternalError() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(500);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.unregisterDriver(paramsMap);
+        assertTrue(obj.get("reason").equals("MSB return fail,internal system error."));
+    }
+
+    public static String toJson(Map o) {
+        try {
+            return JsonUtil.marshal(o);
+        } catch(IOException e) {
+            return "";
+        }
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/VnfmAdapter2DriverManagerTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/adapter/impl/VnfmAdapter2DriverManagerTest.java
new file mode 100644 (file)
index 0000000..f79fa70
--- /dev/null
@@ -0,0 +1,281 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.adapter.impl;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VNFRestfulUtil;
+import org.openo.nfvo.vnfmadapter.testutils.JsonUtil;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONObject;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 24, 2017
+ */
+public class VnfmAdapter2DriverManagerTest {
+
+    VnfmAdapter2DriverManager manager = new VnfmAdapter2DriverManager();
+
+    Map<String, String> vim = new HashMap<String, String>();
+
+    @Before
+    public void setUp() {
+        vim.put("vimId", "123");
+        vim.put("name", "123");
+        vim.put("url", "123");
+        vim.put("userName", "123");
+        vim.put("password", "123");
+        vim.put("type", "123");
+        vim.put("version", "123");
+    }
+
+    @Test
+    public void registerDriverTestNullResp() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+
+                return null;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.registerDriver(paramsMap, new JSONObject());
+        assertTrue(obj.get("reason").equals("RestfulResponse is null."));
+    }
+
+    @Test
+    public void registerDriverCreateSuccess() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(201);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.registerDriver(paramsMap, new JSONObject());
+        assertTrue(Integer.valueOf(obj.get("retCode").toString()) == 201);
+    }
+
+    @Test
+    public void registerDriverOkSuccess() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(200);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.registerDriver(paramsMap, new JSONObject());
+        assertTrue(Integer.valueOf(obj.get("retCode").toString()) == -1);
+    }
+
+    @Test
+    public void registerDriverTestInvalidParams() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(415);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.registerDriver(paramsMap, new JSONObject());
+        assertTrue(obj.get("reason").equals("DriverManager return fail,invalid parameters."));
+    }
+
+    @Test
+    public void registerDriverTestInternalError() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(500);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.registerDriver(paramsMap, new JSONObject());
+        assertTrue(obj.get("reason").equals("DriverManager return fail,internal system error."));
+    }
+
+    @Test
+    public void unregisterDriverTestNullResp() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+
+                return null;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.unregisterDriver(paramsMap);
+        assertTrue(obj.get("reason").equals("RestfulResponse is null."));
+    }
+
+    @Test
+    public void unregisterDriverDeleteSuccess() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(204);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.unregisterDriver(paramsMap);
+        assertTrue(Integer.valueOf(obj.get("retCode").toString()) == 204);
+    }
+
+    @Test
+    public void unregisterDriverResourceNotFound() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(404);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.unregisterDriver(paramsMap);
+        assertTrue(obj.get("reason").equals("DriverManager return fail,can't find the service instance."));
+    }
+
+    @Test
+    public void unregisterDriverTestInvalidParams() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(415);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.unregisterDriver(paramsMap);
+        assertTrue(obj.get("reason").equals("DriverManager return fail,invalid parameters."));
+    }
+
+    @Test
+    public void unregisterDriverTestInternalError() {
+        new MockUp<VNFRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(Map<String, String> paramsMap, String params) {
+                RestfulResponse response = new RestfulResponse();
+                response.setStatus(500);
+
+                String vimStr = toJson(vim);
+                response.setResponseJson(vimStr);
+                return response;
+            }
+        };
+        Map<String, String> paramsMap = new HashMap<>();
+        paramsMap.put("url", "/test/openoapi");
+        paramsMap.put("path", "http://localhost:8080");
+        paramsMap.put("methodType", "get");
+        JSONObject obj = manager.unregisterDriver(paramsMap);
+        assertTrue(obj.get("reason").equals("DriverManager return fail,internal system error."));
+    }
+
+    public static String toJson(Map o) {
+        try {
+            return JsonUtil.marshal(o);
+        } catch(IOException e) {
+            return "";
+        }
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/ai/internalsvc/impl/VnfmAdapter2DriverMgrServiceTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/ai/internalsvc/impl/VnfmAdapter2DriverMgrServiceTest.java
new file mode 100644 (file)
index 0000000..e3393b4
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.ai.internalsvc.impl;
+
+import mockit.Mock;
+import mockit.MockUp;
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.service.api.internalsvc.impl.VnfmAdapter2DriverMgrService;
+
+import java.io.IOException;
+
+/**
+ * Created by QuanZhong on 2017/3/20.
+ */
+public class VnfmAdapter2DriverMgrServiceTest {
+
+    @Test
+    public void testRegister(){
+        VnfmAdapter2DriverMgrService mgr = new VnfmAdapter2DriverMgrService();
+        mgr.register();
+        mgr.unregister();
+    }
+
+    @Test
+    public void testRegister2(){
+        new MockUp<VnfmAdapter2DriverMgrService>(){
+            @Mock
+            public  String readVnfmAdapterInfoFromJson() throws IOException {
+                return "{'url':'http://127.0.0.1'}";
+
+            }
+        };
+        VnfmAdapter2DriverMgrService mgr = new VnfmAdapter2DriverMgrService();
+        mgr.register();
+        mgr.unregister();
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/ai/internalsvc/impl/VnfmAdapterMgrServiceTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/ai/internalsvc/impl/VnfmAdapterMgrServiceTest.java
new file mode 100644 (file)
index 0000000..2a6b744
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.ai.internalsvc.impl;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONObject;
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.service.api.internalsvc.impl.VnfmAdapterMgrService;
+import org.openo.nfvo.vnfmadapter.service.process.VnfMgr;
+
+import java.io.IOException;
+
+/**
+ * Created by QuanZhong on 2017/3/20.
+ */
+public class VnfmAdapterMgrServiceTest {
+    @Test
+    public void testRegister(){
+        new MockUp<VnfmAdapterMgrService>(){
+
+            @Mock
+            public  String readVnfmAdapterInfoFromJson() throws IOException {
+                return "{'abc':'123'}";
+            }
+        };
+        VnfmAdapterMgrService mgr = new VnfmAdapterMgrService();
+        mgr.register();
+
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/constant/TestConstant.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/constant/TestConstant.java
new file mode 100644 (file)
index 0000000..f2142f1
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+package org.openo.nfvo.vnfmadapter.service.constant;
+
+import junit.framework.Assert;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.openo.nfvo.vnfmadapter.service.constant.Constant.AUTHLIST;
+
+/**
+ * Created by QuanZhong on 2017/3/17.
+ */
+public class TestConstant {
+    @Test
+    public void testCreate(){
+        List<String> authlist = AUTHLIST;
+        authlist.contains("abc");
+        String url = UrlConstant.PORT_COMMON;
+        authlist.contains(url);
+        String abc = ParamConstants.CONNECTMGR_CONNECT;
+        authlist.contains(abc);
+        Assert.assertTrue(true);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/api/ConnectInfoTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/api/ConnectInfoTest.java
new file mode 100644 (file)
index 0000000..83a396d
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.api;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class ConnectInfoTest {
+
+    @Test
+    public void constructorTestNullUrl(){
+        ConnectInfo info = new ConnectInfo(null);
+        assertTrue(info.getUrl().equals(""));
+    }
+    @Test
+    public void constructorTestValidUrl(){
+        ConnectInfo info = new ConnectInfo("localhost");
+        assertTrue(info.getUrl().equals("localhost"));
+    }
+    @Test
+    public void constructorTest2NullData(){
+        ConnectInfo info = new ConnectInfo(null,null,null,null);
+        assertTrue(info.getUrl().equals("") && info.getUserName().equals("")
+                && info.getUserPwd().equals("") && info.getAuthenticateMode().equals(""));
+    }
+    @Test
+    public void constructorTestValidData(){
+        ConnectInfo info = new ConnectInfo("localhost","user","password","auth");
+        assertTrue(info.getUrl().equals("localhost") && info.getUserName().equals("user")
+                && info.getUserPwd().equals("password") && info.getAuthenticateMode().equals("auth"));
+    }
+    @Test
+    public void hashCodeTest(){
+        ConnectInfo info1 = new ConnectInfo("localhost","user","password","auth");
+        ConnectInfo info2 = new ConnectInfo("localhost","user","password","auth");
+        assertTrue(info1.hashCode() == info2.hashCode());
+    }
+
+    @Test
+    public void equalsTest(){
+        ConnectInfo info1 = new ConnectInfo("localhost","user","password","auth");
+        ConnectInfo info2 = new ConnectInfo("localhost","user","password","auth");
+        assertTrue(info1.equals(info2));
+    }
+    @Test
+    public void equalsTest2(){
+        ConnectInfo info1 = new ConnectInfo("localhost","user","password","auth");
+        assertTrue(info1.equals(info1));
+    }
+    @Test
+    public void equalsTest3(){
+        ConnectInfo info1 = new ConnectInfo("localhost","user","password","auth");
+        assertTrue(!info1.equals(null));
+    }
+    @Test
+    public void equalsTest4(){
+        ConnectInfo info1 = new ConnectInfo("localhost","user","password","auth");
+        assertTrue(!info1.equals(new Object()));
+    }
+    @Test
+    public void equalsTest5(){
+        ConnectInfo info1 = new ConnectInfo(null,"user","password","auth");
+        ConnectInfo info2 = new ConnectInfo("localhost","user","password","auth");
+        assertTrue(!info1.equals(info2));
+    }
+    @Test
+    public void equalsTest6(){
+        ConnectInfo info1 = new ConnectInfo("testurl","user","password","auth");
+        ConnectInfo info2 = new ConnectInfo("localhost","user","password","auth");
+        assertTrue(!info1.equals(info2));
+    }
+
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/AbstractSslContextTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/AbstractSslContextTest.java
new file mode 100644 (file)
index 0000000..20ed64d
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.connect;
+
+import net.sf.json.JSONObject;
+import org.junit.Test;
+
+/**
+ * Created by QuanZhong on 2017/3/20.
+ */
+public class AbstractSslContextTest {
+    @Test
+    public void createKeyManagerTest(){
+        AbstractSslContext asc = new AbstractSslContext();
+        JSONObject json = new JSONObject();
+        json.put("keyStore","");
+        json.put("keyStorePass","");
+        json.put("keyStoreType","");
+        asc.createKeyManager(json);
+    }
+
+    @Test
+    public void createTrustManagerTest(){
+        AbstractSslContext asc = new AbstractSslContext();
+        JSONObject json = new JSONObject();
+        json.put("trustStore","");
+        json.put("trustStorePass","");
+        json.put("trustStoreType","");
+        asc.createTrustManager(json);
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/HttpRequestsTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/HttpRequestsTest.java
new file mode 100644 (file)
index 0000000..3a0a8ec
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.connect;
+
+import static org.junit.Assert.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.httpclient.Header;
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+
+public class HttpRequestsTest {
+
+    String authenticateMode = "test";
+    HttpRequests.Builder builder = new HttpRequests.Builder(authenticateMode);
+
+    @Test
+    public void addHeaderTest(){
+        builder.addHeader("id", "1234");
+        assertTrue(true);
+    }
+    @Test
+    public void addHeadersTest(){
+        Header header = new Header();
+        builder.addHeaders(header, header);
+        assertNotNull(builder);
+    }
+    @Test
+    public void addHeadersListTest(){
+        List<Header> list = new ArrayList<>();
+        Header header = new Header();
+        list.add(header);
+        builder.addHeaders(list);
+        assertNotNull(builder);
+    }
+
+    @Test(expected = VnfmException.class)
+    public void setUrlTestException() throws VnfmException{
+        String url=null;
+        String path=null;
+        builder.setUrl(url, path);
+    }
+    @Test(expected = VnfmException.class)
+    public void setUrlTestException2() throws VnfmException{
+        String url="";
+        String path=null;
+        builder.setUrl(url, path);
+    }
+
+    @Test(expected = VnfmException.class)
+    public void setUrlTestNormal() throws VnfmException{
+        String url="/test/123";
+        String path="http://localhost:8080";
+        builder.setUrl(url, path);
+    }
+
+    @Test(expected = VnfmException.class)
+    public void setUrl2TestException() throws VnfmException{
+        String url=null;
+        String path=null;
+        builder.setUrl(url, path,101);
+    }
+    @Test(expected = VnfmException.class)
+    public void setUrl2TestException2() throws VnfmException{
+        String url="";
+        String path=null;
+        builder.setUrl(url, path,101);
+    }
+
+    @Test(expected = VnfmException.class)
+    public void setUrl2TestNormal() throws VnfmException{
+        String url="/test/123";
+        String path="http://localhost:8080";
+        builder.setUrl(url, path,101);
+    }
+    @Test(expected = Exception.class)
+    public void requestTestException(){
+        String res = builder.request();
+        assertNotNull(res);
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslAnonymousSocketTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslAnonymousSocketTest.java
new file mode 100644 (file)
index 0000000..23f3280
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.connect;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
+
+import org.apache.commons.httpclient.ConnectTimeoutException;
+import org.apache.commons.httpclient.params.HttpConnectionParams;
+import org.junit.Test;
+
+public class SslAnonymousSocketTest {
+
+    @Test(expected = IOException.class)
+    public void createSocketTestException() throws IOException, ConnectTimeoutException {
+        String host= "localhost";
+        int port = 29912;
+        InetAddress localAddress = null;
+        int localPort = 4859;
+        HttpConnectionParams params = null;
+        SslAnonymousSocket sslsocket = new SslAnonymousSocket();
+        Socket socket  = sslsocket.createSocket(host, port, localAddress, localPort, params);
+    }
+
+    @Test(expected = Exception.class)
+    public void createSocketTestException2() throws IOException, ConnectTimeoutException {
+        String host= "localhost";
+        int port = 29912;
+        InetAddress localAddress = null;
+        int localPort = 4859;
+        HttpConnectionParams params = new HttpConnectionParams();
+        SslAnonymousSocket sslsocket = new SslAnonymousSocket();
+        Socket socket  = sslsocket.createSocket(host, port, localAddress, localPort, params);
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslCertificateSocketTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslCertificateSocketTest.java
new file mode 100644 (file)
index 0000000..80156a0
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.connect;
+
+import org.apache.commons.httpclient.params.HttpConnectionParams;
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+
+import java.io.IOException;
+
+/**
+ * Created by QuanZhong on 2017/3/20.
+ */
+public class SslCertificateSocketTest {
+    @Test
+    public void initTest(){
+        SslCertificateSocket socket = new SslCertificateSocket();
+        try {
+            socket.init();
+        } catch (VnfmException e) {
+            e.printStackTrace();
+        }
+    }
+    @Test
+    public void createSocketTest(){
+        SslCertificateSocket socket = new SslCertificateSocket();
+        try {
+            socket.createSocket("http://127.0.0.1",1234);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void createSocketTest2(){
+        SslCertificateSocket socket = new SslCertificateSocket();
+        try {
+            socket.createSocket("http://127.0.0.1",1234,null,4321,null);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+    @Test
+    public void createSocketTest3(){
+        SslCertificateSocket socket = new SslCertificateSocket();
+        try {
+            HttpConnectionParams params = new HttpConnectionParams();
+            params.setConnectionTimeout(0);
+            socket.createSocket("http://127.0.0.1",1234,null,4321,params);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+    @Test
+    public void createSocketTest4(){
+        SslCertificateSocket socket = new SslCertificateSocket();
+        try {
+            HttpConnectionParams params = new HttpConnectionParams();
+            params.setConnectionTimeout(3000);
+            socket.createSocket("http://127.0.0.1",1234,null,4321,params);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslProtocolSocketFactoryTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/connect/SslProtocolSocketFactoryTest.java
new file mode 100644 (file)
index 0000000..4ecea25
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.connect;
+
+import static org.junit.Assert.*;
+
+import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.common.VnfmException;
+
+public class SslProtocolSocketFactoryTest {
+
+    @Test
+    public void getInstanceTest(){
+        SslProtocolSocketFactory factory = SslProtocolSocketFactory.getInstance();
+        assertNotNull(factory);
+    }
+
+    @Test(expected = VnfmException.class)
+    public void getTest() throws VnfmException{
+        ProtocolSocketFactory factory =  SslProtocolSocketFactory.getInstance().get("test");
+    }
+    @Test
+    public void refreshTestException() throws VnfmException{
+        SslProtocolSocketFactory.getInstance().refresh("test");
+        assertTrue(true);
+    }
+    @Test
+    public void refreshTest() throws VnfmException{
+        SslProtocolSocketFactory.getInstance().refresh("Anonymous");
+        assertTrue(true);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/vnf/VnfMgrVnfmTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/csm/vnf/VnfMgrVnfmTest.java
new file mode 100644 (file)
index 0000000..403483f
--- /dev/null
@@ -0,0 +1,307 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.csm.vnf;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.common.ResultRequestUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 10, 2016
+ */
+public class VnfMgrVnfmTest {
+
+    @Test
+    public void testCreateVnf() {
+        new MockUp<ResultRequestUtil>() {
+
+            @Mock
+            public JSONObject call(JSONObject vnfmObjcet, String path, String methodName, String paramsJson) {
+                JSONObject resultJson = new JSONObject();
+                resultJson.put("retCode", Constant.HTTP_CREATED);
+                JSONObject appInfo = new JSONObject();
+                appInfo.put("vnfinstanceid", "id");
+                appInfo.put("project_id", "project_id");
+                JSONObject data = new JSONObject();
+                data.put("app_info", appInfo);
+                resultJson.put("data", data);
+                return resultJson;
+            }
+        };
+        String data = "{\"vnfmInfo\":{\"url\":\"url\"}}";
+        JSONObject subJsonObject = JSONObject.fromObject(data);
+        JSONObject vnfmObjcet = new JSONObject();
+        VnfMgrVnfm vnfMgrVnfm = new VnfMgrVnfm();
+        JSONObject result = vnfMgrVnfm.createVnf(subJsonObject, vnfmObjcet);
+
+        assertEquals(Constant.REST_SUCCESS, result.get("retCode"));
+    }
+
+    @Test
+    public void testCreateVnfByBadRequest() {
+        new MockUp<ResultRequestUtil>() {
+
+            @Mock
+            public JSONObject call(JSONObject vnfmObjcet, String path, String methodName, String paramsJson) {
+                JSONObject resultJson = new JSONObject();
+                resultJson.put("retCode", Constant.HTTP_BAD_REQUEST);
+                return resultJson;
+            }
+        };
+        String data = "{\"vnfmInfo\":{\"url\":\"url\"}}";
+        JSONObject subJsonObject = JSONObject.fromObject(data);
+        VnfMgrVnfm vnfMgrVnfm = new VnfMgrVnfm();
+        JSONObject vnfmObjcet = new JSONObject();
+        JSONObject result = vnfMgrVnfm.createVnf(subJsonObject, vnfmObjcet);
+
+        JSONObject resultJson = new JSONObject();
+        resultJson.put("retCode", Constant.REST_FAIL);
+        assertEquals(resultJson, result);
+    }
+
+    @Test
+    public void testCreateVnfByNotFound() {
+        new MockUp<ResultRequestUtil>() {
+
+            @Mock
+            public JSONObject call(JSONObject vnfmObjcet, String path, String methodName, String paramsJson) {
+                JSONObject resultJson = new JSONObject();
+                resultJson.put("retCode", Constant.HTTP_NOTFOUND);
+                return resultJson;
+            }
+        };
+        String data = "{\"vnfmInfo\":{\"url\":\"url\"}}";
+        JSONObject subJsonObject = JSONObject.fromObject(data);
+        JSONObject vnfmObjcet = new JSONObject();
+        VnfMgrVnfm vnfMgrVnfm = new VnfMgrVnfm();
+        JSONObject result = vnfMgrVnfm.createVnf(subJsonObject, vnfmObjcet);
+
+        JSONObject resultJson = new JSONObject();
+        resultJson.put("retCode", Constant.REST_FAIL);
+        assertEquals(resultJson, result);
+    }
+
+    @Test
+    public void testCreateVnfByJSONException() {
+        new MockUp<ResultRequestUtil>() {
+
+            @Mock
+            public JSONObject call(JSONObject vnfmObjcet, String path, String methodName, String paramsJson) {
+                JSONObject resultJson = new JSONObject();
+                return resultJson;
+            }
+        };
+        String data = "{\"vnfmInfo\":{\"url\":\"url\"}}";
+        JSONObject subJsonObject = JSONObject.fromObject(data);
+        JSONObject vnfmObjcet = new JSONObject();
+        VnfMgrVnfm vnfMgrVnfm = new VnfMgrVnfm();
+        JSONObject result = vnfMgrVnfm.createVnf(subJsonObject, vnfmObjcet);
+
+        JSONObject resultJson = new JSONObject();
+        resultJson.put("retCode", Constant.REST_FAIL);
+        assertEquals(resultJson, result);
+    }
+
+    @Test
+    public void testRemoveVnf() {
+        new MockUp<ResultRequestUtil>() {
+
+            @Mock
+            public JSONObject call(JSONObject vnfmObjcet, String path, String methodName, String paramsJson) {
+                JSONObject resultJson = new JSONObject();
+                resultJson.put("retCode", Constant.HTTP_NOCONTENT);
+                return resultJson;
+            }
+        };
+        VnfMgrVnfm vnfMgrVnfm = new VnfMgrVnfm();
+        JSONObject vnfmObject = new JSONObject();
+        JSONObject vnfObject = new JSONObject();
+        vnfmObject.put("url", "url");
+        JSONObject result = vnfMgrVnfm.removeVnf(vnfmObject, "vnfId", vnfObject);
+
+        JSONObject resultJson = new JSONObject();
+        resultJson.put("retCode", Constant.REST_SUCCESS);
+        JSONObject retJson = new JSONObject();
+        retJson.put("jobId", "vnfId" + "_" + Constant.DELETE);
+        resultJson.put("data", retJson);
+        assertEquals(resultJson, result);
+    }
+
+    @Test
+    public void testRemoveVnfByCsmError() {
+        new MockUp<ResultRequestUtil>() {
+
+            @Mock
+            public JSONObject call(JSONObject vnfmObjcet, String path, String methodName, String paramsJson) {
+                JSONObject resultJson = new JSONObject();
+                resultJson.put("retCode", Constant.HTTP_INNERERROR);
+                return resultJson;
+            }
+        };
+        VnfMgrVnfm vnfMgrVnfm = new VnfMgrVnfm();
+        JSONObject vnfmObject = new JSONObject();
+        vnfmObject.put("url", "url");
+        JSONObject vnfObject = new JSONObject();
+        JSONObject result = vnfMgrVnfm.removeVnf(vnfmObject, "vnfId", vnfObject);
+
+        JSONObject resultJson = new JSONObject();
+        resultJson.put("retCode", Constant.REST_FAIL);
+        assertEquals(resultJson, result);
+    }
+    @Test
+    public void getJobTestNormal(){
+        new MockUp<ResultRequestUtil>(){
+            @Mock
+            public JSONObject call(JSONObject vnfmObject, String path, String methodName, String paramsJson) {
+                JSONObject obj = new JSONObject();
+                JSONObject dataobj = new JSONObject();
+                dataobj.put("id", "2839");
+                obj.put("retCode", 200);
+                JSONArray basics = new JSONArray();
+                basics.add("test123");
+                JSONObject basicsData = new JSONObject();
+                basicsData.put("basic", basics);
+                obj.put("data", basicsData);
+                return obj;
+            }
+
+        };
+        VnfMgrVnfm vnfMgrVnfm = new VnfMgrVnfm();
+        JSONObject vnfmObject = new JSONObject();
+
+        String jobId = "1234";
+        JSONObject resp = vnfMgrVnfm.getJob(vnfmObject, jobId);
+        assertEquals(resp.get("retCode"),1);
+    }
+
+    @Test
+    public void getJobTestCreatedNormal(){
+        new MockUp<ResultRequestUtil>(){
+            @Mock
+            public JSONObject call(JSONObject vnfmObject, String path, String methodName, String paramsJson) {
+                JSONObject obj = new JSONObject();
+                JSONObject dataobj = new JSONObject();
+                dataobj.put("id", "2839");
+                obj.put("retCode", 201);
+                JSONArray basics = new JSONArray();
+                basics.add("test123");
+                JSONObject basicsData = new JSONObject();
+                basicsData.put("basic", basics);
+                obj.put("data", basicsData);
+                return obj;
+            }
+
+        };
+        VnfMgrVnfm vnfMgrVnfm = new VnfMgrVnfm();
+        JSONObject vnfmObject = new JSONObject();
+
+        String jobId = "1234";
+        JSONObject resp = vnfMgrVnfm.getJob(vnfmObject, jobId);
+        assertEquals(resp.get("retCode"),1);
+    }
+
+    @Test
+    public void getJobTestNullData(){
+        new MockUp<ResultRequestUtil>(){
+            @Mock
+            public JSONObject call(JSONObject vnfmObject, String path, String methodName, String paramsJson) {
+                JSONObject obj = new JSONObject();
+                JSONObject dataobj = new JSONObject();
+                dataobj.put("id", "2839");
+                obj.put("retCode", 201);
+                JSONArray basics = new JSONArray();
+                basics.add("test123");
+                JSONObject basicsData = new JSONObject();
+                basicsData.put("basic", basics);
+                obj.put("data", null);
+                return obj;
+            }
+
+        };
+        VnfMgrVnfm vnfMgrVnfm = new VnfMgrVnfm();
+        JSONObject vnfmObject = new JSONObject();
+
+        String jobId = "1234";
+        JSONObject resp = vnfMgrVnfm.getJob(vnfmObject, jobId);
+        assertEquals(resp.get("retCode"),-1);
+    }
+
+    @Test
+    public void getJobTestInternalError(){
+        new MockUp<ResultRequestUtil>(){
+            @Mock
+            public JSONObject call(JSONObject vnfmObject, String path, String methodName, String paramsJson) {
+                JSONObject obj = new JSONObject();
+                JSONObject dataobj = new JSONObject();
+                dataobj.put("id", "2839");
+                obj.put("retCode", 500);
+                JSONArray basics = new JSONArray();
+                basics.add("test123");
+                JSONObject basicsData = new JSONObject();
+                basicsData.put("basic", basics);
+                obj.put("data", null);
+                return obj;
+            }
+
+        };
+        VnfMgrVnfm vnfMgrVnfm = new VnfMgrVnfm();
+        JSONObject vnfmObject = new JSONObject();
+
+        String jobId = "1234";
+        JSONObject resp = vnfMgrVnfm.getJob(vnfmObject, jobId);
+        assertEquals(resp.get("retCode"),-1);
+    }
+
+
+    @Test
+    public void testScaleVnf() {
+        new MockUp<ResultRequestUtil>() {
+
+            @Mock
+            public JSONObject call(JSONObject vnfmObjcet, String path, String methodName, String paramsJson) {
+                JSONObject resultJson = new JSONObject();
+                resultJson.put("retCode", Constant.HTTP_CREATED);
+                JSONObject appInfo = new JSONObject();
+                appInfo.put("vnfinstanceid", "id");
+                appInfo.put("project_id", "project_id");
+                JSONObject data = new JSONObject();
+                data.put("app_info", appInfo);
+                resultJson.put("data", data);
+                return resultJson;
+            }
+        };
+        String data = "{\"vnfmInfo\":{\"url\":\"url\"}}";
+        JSONObject subJsonObject = JSONObject.fromObject(data);
+        JSONObject vnfmObjcet = new JSONObject();
+        VnfMgrVnfm vnfMgrVnfm = new VnfMgrVnfm();
+        JSONObject result = vnfMgrVnfm.scaleVnf(subJsonObject,vnfmObjcet,"test123","test123");
+
+        assertEquals(Constant.REST_SUCCESS, result.get("retCode"));
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/dao/impl/VnfmDaoImplTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/dao/impl/VnfmDaoImplTest.java
new file mode 100644 (file)
index 0000000..4564d69
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+package org.openo.nfvo.vnfmadapter.service.dao.impl;
+
+import junit.framework.Assert;
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.service.entity.Vnfm;
+
+/**
+ * Created by QuanZhong on 2017/3/17.
+ */
+public class VnfmDaoImplTest {
+
+    @Test
+    public void insertVnfm() throws ServiceException {
+        VnfmDaoImpl dao = new VnfmDaoImpl();
+        dao.insertVnfm(new Vnfm());
+        Assert.assertTrue(true);
+    }
+
+    @Test
+    public void deleteVnfm() throws ServiceException {
+        VnfmDaoImpl dao = new VnfmDaoImpl();
+        dao.deleteVnfm("abc");
+        Assert.assertTrue(true);
+    }
+
+    @Test
+    public void updateVnfm() throws ServiceException {
+        VnfmDaoImpl dao = new VnfmDaoImpl();
+        dao.updateVnfm(new Vnfm());
+        Assert.assertTrue(true);
+    }
+
+    @Test
+    public void indexVnfms() throws ServiceException {
+        VnfmDaoImpl dao = new VnfmDaoImpl();
+        dao.insertVnfm(new Vnfm());
+        Assert.assertTrue(true);
+
+    }
+
+    @Test
+    public void getVnfmById() {
+        VnfmDaoImpl dao = new VnfmDaoImpl();
+        dao.getVnfmById("abc");
+        Assert.assertTrue(true);
+
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/entity/VnfmTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/entity/VnfmTest.java
new file mode 100644 (file)
index 0000000..c999678
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.entity;
+
+import static org.junit.Assert.*;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class VnfmTest {
+    Vnfm vnfm;
+
+    @Before
+    public void setUp(){
+        vnfm = new Vnfm();
+        vnfm.setId("123");
+        vnfm.setId("v1");
+        vnfm.setVnfdId("1234");
+        vnfm.setVnfPackageId("abcd");
+    }
+
+    @Test
+    public void hashCodeTest(){
+        Vnfm tempVnfm = new Vnfm();
+        tempVnfm.setId("123");
+        tempVnfm.setId("v1");
+        tempVnfm.setVnfdId("1234");
+        tempVnfm.setVnfPackageId("abcd");
+        assertTrue(vnfm.hashCode() == tempVnfm.hashCode());
+    }
+
+    @Test
+    public void equalsTest1(){
+        Vnfm tempVnfm = new Vnfm();
+        tempVnfm.setId("123");
+        tempVnfm.setId("v1");
+        tempVnfm.setVnfdId("1234");
+        tempVnfm.setVnfPackageId("abcd");
+        assertTrue(vnfm.equals(tempVnfm));
+    }
+
+    @Test
+    public void equalsTest2(){
+        assertTrue(vnfm.equals(vnfm));
+    }
+
+    @Test
+    public void equalsTest3(){
+
+        assertTrue(!vnfm.equals(null));
+    }
+    @Test
+    public void equalsTest4(){
+
+        assertTrue(!vnfm.equals(new Object()));
+    }
+    @Test
+    public void equalsTest5(){
+
+        assertTrue(!vnfm.equals(new Object()));
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/AuthMgrTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/AuthMgrTest.java
new file mode 100644 (file)
index 0000000..718423c
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.process;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VnfmRestfulUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONObject;
+
+public class AuthMgrTest {
+
+    @Test
+    public void testAuthTokenByDomainNameByJSONException() {
+        AuthMgr authMgr = new AuthMgr();
+        String data = "{\"auth\":{}}";
+        JSONObject params = JSONObject.fromObject(data);
+
+        JSONObject result = authMgr.authToken(params);
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        restJson.put("data", "JSONException");
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testAuthToken() {
+        new MockUp<VnfmRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse  getRestResByDefault(String auth, String method, JSONObject authParams) {
+                RestfulResponse response = null;
+                return response;
+            }
+        };
+
+        AuthMgr authMgr = new AuthMgr();
+        String data = "{\"auth\":{\"identity\":{\"password\":{\"user\":{\"name\":\"om_team\",\"password\":\"123\"}}}}}";
+        JSONObject params = JSONObject.fromObject(data);
+
+        JSONObject result = authMgr.authToken(params);
+        assertEquals(Constant.REST_SUCCESS, result.getInt("retCode"));
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/RegisterMgrTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/RegisterMgrTest.java
new file mode 100644 (file)
index 0000000..eee4e1d
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.process;
+
+import org.junit.Test;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VnfmRestfulUtil;
+
+import mockit.Mock;
+import mockit.MockUp;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 13, 2017
+ */
+public class RegisterMgrTest {
+
+    @Test
+    public void testRegister() {
+        new MockUp<VnfmRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(String url, String methodType, String params) {
+                RestfulResponse rsp = new RestfulResponse();
+                rsp.setStatus(200);
+                return rsp;
+            }
+        };
+        RegisterMgr register = new RegisterMgr();
+        register.register();
+    }
+
+    @Test
+    public void testUnRegister() {
+        new MockUp<VnfmRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(String url, String methodType, String params) {
+                RestfulResponse rsp = new RestfulResponse();
+                rsp.setStatus(200);
+                return rsp;
+            }
+        };
+        RegisterMgr register = new RegisterMgr();
+        register.unRegister();
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/VnfMgrTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/VnfMgrTest.java
new file mode 100644 (file)
index 0000000..5f2b94d
--- /dev/null
@@ -0,0 +1,497 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.process;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.common.ResultRequestUtil;
+import org.openo.nfvo.vnfmadapter.common.VnfmUtil;
+import org.openo.nfvo.vnfmadapter.service.adapter.impl.AdapterResourceManager;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.csm.vnf.VnfMgrVnfm;
+import org.openo.nfvo.vnfmadapter.service.dao.impl.VnfmDaoImpl;
+import org.openo.nfvo.vnfmadapter.service.dao.inf.VnfmDao;
+import org.openo.nfvo.vnfmadapter.service.entity.Vnfm;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+
+public class VnfMgrTest {
+
+    private VnfmDao vnfmDao;
+
+    private VnfMgr vnfMgr;
+
+    @Before
+    public void setUp() {
+        vnfMgr = new VnfMgr();
+        vnfmDao = new VnfmDaoImpl();
+        vnfMgr.setVnfmDao(vnfmDao);
+    }
+
+    @Test
+    public void testAddVnfByInvalidateDataVnfInfoNull() {
+        String data = "{}";
+        JSONObject subJsonObject = JSONObject.fromObject(data);
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject result = vnfMgr.addVnf(subJsonObject, "vnmfId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testAddVnfByInvalidateDataVnfInfoEmpty() {
+        String data = "{}";
+        JSONObject subJsonObject = JSONObject.fromObject(data);
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject result = vnfMgr.addVnf(subJsonObject, "vnmfId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testAddVnfByVnfmObjcetIsNullObject() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                return new JSONObject(true);
+            }
+        };
+        String data =
+                "{\"soId\": \"soId\",\"vapp_info\":{\"vnfm_id\":\"vnfm_id\",\"soId\": \"soId\",\"do_id\": \"do_id\"}}";
+        JSONObject subJsonObject = JSONObject.fromObject(data);
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject result = vnfMgr.addVnf(subJsonObject, "vnmfId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testAddVnfByVnfmObjcetTypeEmpty() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                JSONObject obj = new JSONObject();
+                obj.put("type", "");
+                return obj;
+            }
+        };
+        String data =
+                "{\"soId\": \"soId\",\"vapp_info\":{\"vnfm_id\":\"vnfm_id\",\"soId\": \"soId\",\"do_id\": \"do_id\"}}";
+        JSONObject subJsonObject = JSONObject.fromObject(data);
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject result = vnfMgr.addVnf(subJsonObject, "vnmfId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testAddVnf() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                JSONObject obj = new JSONObject();
+                obj.put("type", "hw");
+                obj.put("vnfmId", "123");
+                obj.put("userName", "admin");
+                obj.put("password", "admin");
+                obj.put("url", "https://10.2.31.2:30001");
+                return obj;
+            }
+        };
+
+        new MockUp<VnfMgrVnfm>() {
+
+            @Mock
+            public JSONObject createVnf(JSONObject subJsonObject, JSONObject vnfmObjcet) {
+                JSONObject restJson = new JSONObject();
+                restJson.put("retCode", Constant.REST_SUCCESS);
+                return restJson;
+            }
+        };
+
+        new MockUp<AdapterResourceManager>() {
+
+            @Mock
+            public JSONObject uploadVNFPackage(JSONObject subJsonObject, Map<String, String> conMap) {
+                JSONObject restJson = new JSONObject();
+                restJson.put("retCode", Constant.REST_SUCCESS);
+                restJson.put("vnfdId", "123");
+                return restJson;
+            }
+        };
+
+        String data =
+                "{\"vnfPackageId\": \"vnfPackageId\",\"vnfId\": \"vnfId\",\"additionalParam\":{\"parameters\":{\"input\":\"input\"}}}";
+        JSONObject subJsonObject = JSONObject.fromObject(data);
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject result = vnfMgr.addVnf(subJsonObject, "vnfmId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_SUCCESS);
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testDeleteVnf() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                JSONObject obj = new JSONObject();
+                obj.put("type", "hw");
+                obj.put("vnfmId", "123");
+                obj.put("userName", "admin");
+                obj.put("password", "admin");
+                obj.put("url", "https://10.2.31.2:30001");
+                return obj;
+            }
+        };
+        new MockUp<VnfMgrVnfm>() {
+
+            @Mock
+            public JSONObject removeVnf(JSONObject vnfmObject, String vnfId, JSONObject vnfObject) {
+                JSONObject obj = new JSONObject();
+                obj.put("retCode", Constant.REST_SUCCESS);
+                return obj;
+            }
+        };
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject vnfObject = new JSONObject();
+        JSONObject result = vnfMgr.deleteVnf("vnfId", "vnfmId", vnfObject);
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_SUCCESS);
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testDeleteVnfByVnfmObjcetIsNullObject() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                JSONObject obj = new JSONObject(true);
+                return obj;
+            }
+        };
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject vnfObject = new JSONObject();
+        JSONObject result = vnfMgr.deleteVnf("vnfId", "vnfmId", vnfObject);
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        assertEquals(restJson, result);
+
+    }
+
+    @Test
+    public void testDeleteVnfByException() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                throw new JSONException();
+            }
+        };
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject vnfObject = new JSONObject();
+        JSONObject result = vnfMgr.deleteVnf("vnfId", "vnfmId", vnfObject);
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        assertEquals(restJson, result);
+
+    }
+
+    @Test
+    public void testGetVnf() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                JSONObject obj = new JSONObject();
+                obj.put("type", "hw");
+                obj.put("vnfmId", "123");
+                obj.put("userName", "admin");
+                obj.put("password", "admin");
+                obj.put("url", "https://10.2.31.2:30001");
+                return obj;
+            }
+        };
+
+        new MockUp<VnfmDaoImpl>() {
+
+            @Mock
+            public Vnfm getVnfmById(String vnfmId) {
+                Vnfm obj = new Vnfm();
+                obj.setId("123");
+                obj.setVersion("v2.0");
+                obj.setVnfdId("234");
+                obj.setVnfPackageId("123");
+                return obj;
+            }
+        };
+
+        new MockUp<ResultRequestUtil>() {
+
+            @Mock
+            public JSONObject call(JSONObject vnfmObjcet, String path, String methodName, String paramsJson) {
+                JSONObject resultJson = new JSONObject();
+                resultJson.put("retCode", Constant.HTTP_OK);
+                JSONObject data = new JSONObject();
+
+                JSONArray result = new JSONArray();
+                JSONObject basicInfo = new JSONObject();
+                basicInfo.put("id", "NE=345");
+                basicInfo.put("vapp_name", "sc");
+                basicInfo.put("status", "active");
+                result.add(basicInfo);
+                data.put("basic", result);
+                resultJson.put("data", data.toString());
+                return resultJson;
+            }
+        };
+
+        JSONObject result = vnfMgr.getVnf("vnfId", "vnfmId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_SUCCESS);
+        result.remove("vnfInfo");
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testGetVnfFail() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                JSONObject obj = new JSONObject(true);
+                return obj;
+            }
+        };
+
+        JSONObject result = vnfMgr.getVnf("vnfId", "vnfmId");
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testGetVnfFail1() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                throw new JSONException();
+            }
+        };
+
+        JSONObject result = vnfMgr.getVnf("vnfId", "vnfmId");
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testSaveVnfInfo() {
+        new MockUp<VnfmDaoImpl>() {
+
+            @Mock
+            public int insertVnfm(Vnfm vnfm) throws ServiceException {
+                return 1;
+            }
+        };
+
+        VnfMgr vnfMgr = new VnfMgr();
+        VnfmDao dao = new VnfmDaoImpl();
+        vnfMgr.setVnfmDao(dao);
+        JSONObject vnfObject = new JSONObject();
+        vnfObject.put("retCode", Constant.REST_SUCCESS);
+        vnfObject.put("vnfInstanceId", "vnfInstanceId");
+        vnfObject.put("vnfPackageId", "vnfPackageId");
+        JSONObject resObject = new JSONObject();
+        resObject.put("vnfdVersion", "vnfdVersion");
+        resObject.put("vnfdId", "vnfdId");
+        vnfMgr.saveVnfInfo(vnfObject, resObject);
+    }
+
+    @Test
+    public void testSaveVnfInfoFail() {
+        new MockUp<VnfmDaoImpl>() {
+
+            @Mock
+            public int insertVnfm(Vnfm vnfm) throws ServiceException {
+                return 1;
+            }
+        };
+
+        VnfMgr vnfMgr = new VnfMgr();
+        VnfmDao dao = new VnfmDaoImpl();
+        vnfMgr.setVnfmDao(dao);
+        JSONObject vnfObject = new JSONObject();
+        vnfObject.put("retCode", Constant.REST_FAIL);
+        vnfObject.put("vnfInstanceId", "vnfInstanceId");
+        vnfObject.put("vnfPackageId", "vnfPackageId");
+        JSONObject resObject = new JSONObject();
+        resObject.put("vnfdVersion", "vnfdVersion");
+        resObject.put("vnfdId", "vnfdId");
+        vnfMgr.saveVnfInfo(vnfObject, resObject);
+    }
+
+    @Test
+    public void testSaveVnfInfoServiceException() {
+        new MockUp<VnfmDaoImpl>() {
+
+            @Mock
+            public int insertVnfm(Vnfm vnfm) throws ServiceException {
+                throw new ServiceException();
+            }
+        };
+
+        VnfMgr vnfMgr = new VnfMgr();
+        VnfmDao dao = new VnfmDaoImpl();
+        vnfMgr.setVnfmDao(dao);
+        JSONObject vnfObject = new JSONObject();
+        vnfObject.put("retCode", Constant.REST_SUCCESS);
+        vnfObject.put("vnfInstanceId", "vnfInstanceId");
+        vnfObject.put("vnfPackageId", "vnfPackageId");
+        JSONObject resObject = new JSONObject();
+        resObject.put("vnfdVersion", "vnfdVersion");
+        resObject.put("vnfdId", "vnfdId");
+        vnfMgr.saveVnfInfo(vnfObject, resObject);
+    }
+
+    @Test
+    public void testGetJob() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                JSONObject obj = new JSONObject();
+                obj.put("test", "success");
+                return obj;
+            }
+        };
+
+        new MockUp<VnfMgrVnfm>() {
+
+            @Mock
+            public JSONObject getJob(JSONObject vnfmObject, String jobId) {
+                JSONObject res = new JSONObject();
+                res.put(Constant.RETCODE, Constant.REST_SUCCESS);
+                return res;
+            }
+        };
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject result = vnfMgr.getJob("", "");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testGetJobFail() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                return new JSONObject();
+            }
+        };
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject result = vnfMgr.getJob("", "");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        assertEquals(restJson, result);
+    }
+
+    @Test
+    public void testGetJobFail1() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                return new JSONObject(true);
+            }
+        };
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject result = vnfMgr.getJob("", "");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+        assertEquals(restJson, result);
+    }
+    @Test
+    public void testScaleVnf() {
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public JSONObject getVnfmById(String vnfmId) {
+                JSONObject obj = new JSONObject();
+                obj.put("type", "hw");
+                obj.put("vnfmId", "123");
+                obj.put("userName", "admin");
+                obj.put("password", "admin");
+                obj.put("url", "https://10.2.31.2:30001");
+                return obj;
+            }
+        };
+
+        new MockUp<VnfMgrVnfm>() {
+
+            @Mock
+            public JSONObject scaleVnf(JSONObject vnfObject, JSONObject vnfmObject, String vnfmId, String vnfInstanceId) {
+                JSONObject restJson = new JSONObject();
+                restJson.put("retCode", Constant.REST_SUCCESS);
+                return restJson;
+            }
+        };
+
+        String data =
+                "{\"vnfPackageId\": \"vnfPackageId\",\"vnfId\": \"vnfId\",\"additionalParam\":{\"parameters\":{\"input\":\"input\"}}}";
+        JSONObject subJsonObject = JSONObject.fromObject(data);
+        VnfMgr vnfMgr = new VnfMgr();
+        JSONObject result = vnfMgr.scaleVNF(subJsonObject,"testId","testId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_SUCCESS);
+        assertEquals(restJson, result);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/VnfResourceMgrTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/process/VnfResourceMgrTest.java
new file mode 100644 (file)
index 0000000..c706178
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.process;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openo.baseservice.roa.util.restclient.RestfulResponse;
+import org.openo.nfvo.vnfmadapter.common.servicetoken.VnfmRestfulUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONObject;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 9, 2016
+ */
+public class VnfResourceMgrTest {
+
+    @Test
+    public void testgrantVnfResource() {
+
+        String data =
+                "{\"type\": \"instantiation\",\"operation_right\": \"increase\",\"vnf_name\": \"vnf_name\",\"vm_list\": [{\"vm_flavor\": {\"storage\": [{\"vol_type\": \"local_volume\",\"vol_size\": \"2\",\"storage_type\": \"local_image\",\"disk_size\": \"100\"}],\"num_cpus\": \"6\",\"mem_size\": \"8\"},\"init_number\": \"1\"}],\"version\": \"version\",\"template_id\": \"template_id\",\"template_name\": \"template_name\",\"plan_id\": \"plan_id\",\"plan_name\": \"plan_name\",\"project_id\": \"project_id\",\"project_name\": \"project_name\",\"creator\": \"creator\",\"status\": \"status\",\"tenant\": \"tenant\",\"parent_tenant\": \"parent_tenant\",\"vnfd_id\": \"vnfd_id\",\"location\": \"location\",\"dr_location\": \"dr_location\",\"nfvo_id\": \"nfvo_id\"}";
+        JSONObject vnfObj = JSONObject.fromObject(data);
+        VnfResourceMgr vnfResourceMgr = new VnfResourceMgr();
+        JSONObject result = vnfResourceMgr.grantVnfResource(vnfObj, "vnfId", "vnfmId");
+
+        JSONObject retJson = new JSONObject();
+        retJson.put("retCode", Constant.REST_FAIL);
+        retJson.put("errorMsg", "params parse exception");
+        assertEquals(retJson, result);
+    }
+
+    @Test
+    public void testgrantVnfResourceSuccess() {
+        new MockUp<VnfmRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(String url, String methodType, String params) {
+                RestfulResponse rsp = new RestfulResponse();
+                rsp.setStatus(200);
+                rsp.setResponseJson(new JSONObject().toString());
+                return rsp;
+            }
+        };
+
+        JSONObject vnfObj = new JSONObject();
+        String data =
+                "{\"type\": \"instantiation\",\"location\": \"RomaRespool\",\"version\":\"V500R001C20\",\"vendor\": \"V500R001C20B001\",\"tenant\": \"admin\",\"vnf_id\":\"NE=1304\",\"vnfm_id\": \"9a49755d-8050-4369-9e7d-0a0855097585\",\"project_id\":\"\",\"operation_right\": \"increase\",\"vnf_name\": \"wangyuans4\",\"vim_id\":\"\",\"dr_location\": \"RomaRespool\",\"nfvo_id\": \"\",\"vnf_type\": \"vNGFW\",\"plan_id\":\"V4\",\"plan_name\": \"V4\",\"vnfd_id\": \"vNGFW\",\"vm_list\": [{\"vm_flavor\":{\"location\": \"\",\"priority\": \"1\",\"storage\": [{\"vol_type\":\"local_volume\",\"vol_size\": \"200\"},{\"storage_type\": \"local_image\",\"disk_size\":\"80\"}],\"vdu_name\": \"OMU\",\"num_cpus\": \"4\",\"mem_size\": \"8192\"},\"init_number\":\"1\"}],\"ex_vim_list\": []}";
+        vnfObj = JSONObject.fromObject(data);
+        VnfResourceMgr grantTest = new VnfResourceMgr();
+        JSONObject result = grantTest.grantVnfResource(vnfObj, "1111", "abc");
+
+        JSONObject retJson = new JSONObject();
+        assertEquals(retJson, result);
+    }
+
+    @Test
+    public void testgrantVnfResourceSuccess1() {
+        new MockUp<VnfmRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(String url, String methodType, String params) {
+                RestfulResponse rsp = new RestfulResponse();
+                rsp.setStatus(200);
+                rsp.setResponseJson(new JSONObject().toString());
+                return rsp;
+            }
+        };
+
+        JSONObject vnfObj = new JSONObject();
+        String data =
+                "{\"type\": \"instantiation\",\"location\": \"RomaRespool\",\"version\":\"V500R001C20\",\"vendor\": \"V500R001C20B001\",\"tenant\": \"admin\",\"vnf_id\":\"NE=1304\",\"vnfm_id\": \"9a49755d-8050-4369-9e7d-0a0855097585\",\"project_id\":\"\",\"operation_right\": \"decrease\",\"vnf_name\": \"wangyuans4\",\"vim_id\":\"\",\"dr_location\": \"RomaRespool\",\"nfvo_id\": \"\",\"vnf_type\": \"vNGFW\",\"plan_id\":\"V4\",\"plan_name\": \"V4\",\"vnfd_id\": \"vNGFW\",\"vm_list\": [{\"vm_flavor\":{\"location\": \"\",\"priority\": \"1\",\"storage\": [{\"vol_type\":\"local_volume\",\"vol_size\": \"200\"},{\"storage_type\": \"local_image\",\"disk_size\":\"80\"}],\"vdu_name\": \"OMU\",\"num_cpus\": \"4\",\"mem_size\": \"8192\"},\"init_number\":\"1\"}],\"ex_vim_list\": []}";
+        vnfObj = JSONObject.fromObject(data);
+        VnfResourceMgr grantTest = new VnfResourceMgr();
+        JSONObject result = grantTest.grantVnfResource(vnfObj, "1111", "abc");
+
+        JSONObject retJson = new JSONObject();
+        assertEquals(retJson, result);
+    }
+
+    @Test
+    public void testgrantVnfResourceSuccess2() {
+        new MockUp<VnfmRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(String url, String methodType, String params) {
+                RestfulResponse rsp = new RestfulResponse();
+                rsp.setStatus(200);
+                rsp.setResponseJson(new JSONObject().toString());
+                return rsp;
+            }
+        };
+
+        JSONObject vnfObj = new JSONObject();
+        String data =
+                "{\"type\": \"scale\",\"location\": \"RomaRespool\",\"version\":\"V500R001C20\",\"vendor\": \"V500R001C20B001\",\"tenant\": \"admin\",\"vnf_id\":\"NE=1304\",\"vnfm_id\": \"9a49755d-8050-4369-9e7d-0a0855097585\",\"project_id\":\"\",\"operation_right\": \"decrease\",\"vnf_name\": \"wangyuans4\",\"vim_id\":\"\",\"dr_location\": \"RomaRespool\",\"nfvo_id\": \"\",\"vnf_type\": \"vNGFW\",\"plan_id\":\"V4\",\"plan_name\": \"V4\",\"vnfd_id\": \"vNGFW\",\"vm_list\": [{\"vm_flavor\":{\"location\": \"\",\"priority\": \"1\",\"storage\": [{\"vol_type\":\"local_volume\",\"vol_size\": \"200\"},{\"storage_type\": \"local_image\",\"disk_size\":\"80\"}],\"vdu_name\": \"OMU\",\"num_cpus\": \"4\",\"mem_size\": \"8192\"},\"init_number\":\"1\"}],\"ex_vim_list\": []}";
+        vnfObj = JSONObject.fromObject(data);
+        VnfResourceMgr grantTest = new VnfResourceMgr();
+        JSONObject result = grantTest.grantVnfResource(vnfObj, "1111", "abc");
+
+        JSONObject retJson = new JSONObject();
+        assertEquals(retJson, result);
+    }
+
+    @Test
+    public void testgrantVnfResourceSuccess3() {
+        new MockUp<VnfmRestfulUtil>() {
+
+            @Mock
+            public RestfulResponse getRemoteResponse(String url, String methodType, String params) {
+                RestfulResponse rsp = new RestfulResponse();
+                rsp.setStatus(200);
+                rsp.setResponseJson(new JSONObject().toString());
+                return rsp;
+            }
+        };
+
+        JSONObject vnfObj = new JSONObject();
+        String data =
+                "{\"type\": \"scale\",\"location\": \"RomaRespool\",\"version\":\"V500R001C20\",\"vendor\": \"V500R001C20B001\",\"tenant\": \"admin\",\"vnf_id\":\"NE=1304\",\"vnfm_id\": \"9a49755d-8050-4369-9e7d-0a0855097585\",\"project_id\":\"\",\"operation_right\": \"increase\",\"vnf_name\": \"wangyuans4\",\"vim_id\":\"\",\"dr_location\": \"RomaRespool\",\"nfvo_id\": \"\",\"vnf_type\": \"vNGFW\",\"plan_id\":\"V4\",\"plan_name\": \"V4\",\"vnfd_id\": \"vNGFW\",\"vm_list\": [{\"vm_flavor\":{\"location\": \"\",\"priority\": \"1\",\"storage\": [{\"vol_type\":\"local_volume\",\"vol_size\": \"200\"},{\"storage_type\": \"local_image\",\"disk_size\":\"80\"}],\"vdu_name\": \"OMU\",\"num_cpus\": \"4\",\"mem_size\": \"8192\"},\"init_number\":\"1\"}],\"ex_vim_list\": []}";
+        vnfObj = JSONObject.fromObject(data);
+        VnfResourceMgr grantTest = new VnfResourceMgr();
+        JSONObject result = grantTest.grantVnfResource(vnfObj, "1111", "abc");
+
+        JSONObject retJson = new JSONObject();
+        assertEquals(retJson, result);
+    }
+
+    @Test
+    public void testgrantVnfResourceByResMapNull() {
+
+        String data =
+                "{\"type\": \"instantiation\",\"operation_right\": \"increase\",\"vnf_name\": \"vnf_name\",\"vm_list\": [{\"vm_flavors\": {\"storage\": [{\"vol_type\": \"local_volume\",\"vol_size\": \"2\",\"storage_type\": \"local_image\",\"disk_size\": \"100\"}],\"num_cpus\": \"6\",\"mem_size\": \"8\"},\"init_number\": \"1\"}],\"version\": \"version\",\"template_id\": \"template_id\",\"template_name\": \"template_name\",\"plan_id\": \"plan_id\",\"plan_name\": \"plan_name\",\"project_id\": \"project_id\",\"project_name\": \"project_name\",\"creator\": \"creator\",\"status\": \"status\",\"tenant\": \"tenant\",\"parent_tenant\": \"parent_tenant\",\"vnfd_id\": \"vnfd_id\",\"location\": \"location\",\"dr_location\": \"dr_location\",\"nfvo_id\": \"nfvo_id\"}";
+        JSONObject vnfObj = JSONObject.fromObject(data);
+        VnfResourceMgr vnfResourceMgr = new VnfResourceMgr();
+        JSONObject result = vnfResourceMgr.grantVnfResource(vnfObj, "vnfId", "vnfmId");
+
+        JSONObject retJson = new JSONObject();
+        retJson.put("retCode", Constant.REST_FAIL);
+        retJson.put("errorMsg", "resource params error");
+        assertEquals(retJson, result);
+    }
+
+    @Test
+    public void testgrantVnfResourceByTypeIsEmpty() {
+        String data =
+                "{\"type\": \"\",\"operation_right\": \"increase\",\"vnf_name\": \"vnf_name\",\"vm_list\": [{\"vm_flavor\": {\"storage\": [{\"vol_type\": \"local_volume\",\"vol_size\": \"2\",\"storage_type\": \"local_image\",\"disk_size\": \"100\"}],\"num_cpus\": \"6\",\"mem_size\": \"8\"},\"init_number\": \"1\"}],\"version\": \"version\",\"template_id\": \"template_id\",\"template_name\": \"template_name\",\"plan_id\": \"plan_id\",\"plan_name\": \"plan_name\",\"project_id\": \"project_id\",\"project_name\": \"project_name\",\"creator\": \"creator\",\"status\": \"status\",\"tenant\": \"tenant\",\"parent_tenant\": \"parent_tenant\",\"vnfd_id\": \"vnfd_id\",\"location\": \"location\",\"dr_location\": \"dr_location\",\"nfvo_id\": \"nfvo_id\"}";
+        JSONObject vnfObj = JSONObject.fromObject(data);
+        VnfResourceMgr vnfResourceMgr = new VnfResourceMgr();
+        JSONObject result = vnfResourceMgr.grantVnfResource(vnfObj, "vnfId", "vnfmId");
+
+        JSONObject retJson = new JSONObject();
+        retJson.put("retCode", Constant.REST_FAIL);
+        retJson.put("errorMsg", "basic params error");
+        assertEquals(retJson, result);
+    }
+
+    @Test
+    public void testgrantVnfResourceByVnfNameIsEmpty() {
+        String data =
+                "{\"type\": \"instantiation\",\"operation_right\": \"increase\",\"vnf_name\": \"\",\"vm_list\": [{\"vm_flavor\": {\"storage\": [{\"vol_type\": \"local_volume\",\"vol_size\": \"2\",\"storage_type\": \"local_image\",\"disk_size\": \"100\"}],\"num_cpus\": \"6\",\"mem_size\": \"8\"},\"init_number\": \"1\"}],\"version\": \"version\",\"template_id\": \"template_id\",\"template_name\": \"template_name\",\"plan_id\": \"plan_id\",\"plan_name\": \"plan_name\",\"project_id\": \"project_id\",\"project_name\": \"project_name\",\"creator\": \"creator\",\"status\": \"status\",\"tenant\": \"tenant\",\"parent_tenant\": \"parent_tenant\",\"vnfd_id\": \"vnfd_id\",\"location\": \"location\",\"dr_location\": \"dr_location\",\"nfvo_id\": \"nfvo_id\"}";
+        JSONObject vnfObj = JSONObject.fromObject(data);
+        VnfResourceMgr vnfResourceMgr = new VnfResourceMgr();
+        JSONObject result = vnfResourceMgr.grantVnfResource(vnfObj, "vnfId", "vnfmId");
+
+        JSONObject retJson = new JSONObject();
+        retJson.put("retCode", Constant.REST_FAIL);
+        retJson.put("errorMsg", "basic params error");
+        assertEquals(retJson, result);
+    }
+
+    @Test
+    public void testgrantVnfResourceByVnfIdIsEmpty() {
+        String data =
+                "{\"type\": \"instantiation\",\"operation_right\": \"increase\",\"vnf_name\": \"vnf_name\",\"vm_list\": [{\"vm_flavor\": {\"storage\": [{\"vol_type\": \"local_volume\",\"vol_size\": \"2\",\"storage_type\": \"local_image\",\"disk_size\": \"100\"}],\"num_cpus\": \"6\",\"mem_size\": \"8\"},\"init_number\": \"1\"}],\"version\": \"version\",\"template_id\": \"template_id\",\"template_name\": \"template_name\",\"plan_id\": \"plan_id\",\"plan_name\": \"plan_name\",\"project_id\": \"project_id\",\"project_name\": \"project_name\",\"creator\": \"creator\",\"status\": \"status\",\"tenant\": \"tenant\",\"parent_tenant\": \"parent_tenant\",\"vnfd_id\": \"vnfd_id\",\"location\": \"location\",\"dr_location\": \"dr_location\",\"nfvo_id\": \"nfvo_id\"}";
+        JSONObject vnfObj = JSONObject.fromObject(data);
+        VnfResourceMgr vnfResourceMgr = new VnfResourceMgr();
+        JSONObject result = vnfResourceMgr.grantVnfResource(vnfObj, "", "vnfmId");
+
+        JSONObject retJson = new JSONObject();
+        retJson.put("retCode", Constant.REST_FAIL);
+        retJson.put("errorMsg", "basic params error");
+        assertEquals(retJson, result);
+    }
+
+    @Test
+    public void testgrantVnfResourceByRequestTypeIsEmpty() {
+        String data =
+                "{\"type\": \"instantiation\",\"operation_right\": \"\",\"vnf_name\": \"vnf_name\",\"vm_list\": [{\"vm_flavor\": {\"storage\": [{\"vol_type\": \"local_volume\",\"vol_size\": \"2\",\"storage_type\": \"local_image\",\"disk_size\": \"100\"}],\"num_cpus\": \"6\",\"mem_size\": \"8\"},\"init_number\": \"1\"}],\"version\": \"version\",\"template_id\": \"template_id\",\"template_name\": \"template_name\",\"plan_id\": \"plan_id\",\"plan_name\": \"plan_name\",\"project_id\": \"project_id\",\"project_name\": \"project_name\",\"creator\": \"creator\",\"status\": \"status\",\"tenant\": \"tenant\",\"parent_tenant\": \"parent_tenant\",\"vnfd_id\": \"vnfd_id\",\"location\": \"location\",\"dr_location\": \"dr_location\",\"nfvo_id\": \"nfvo_id\"}";
+        JSONObject vnfObj = JSONObject.fromObject(data);
+        VnfResourceMgr vnfResourceMgr = new VnfResourceMgr();
+        JSONObject result = vnfResourceMgr.grantVnfResource(vnfObj, "vnfId", "vnfmId");
+
+        JSONObject retJson = new JSONObject();
+        retJson.put("retCode", Constant.REST_FAIL);
+        retJson.put("errorMsg", "basic params error");
+        assertEquals(retJson, result);
+    }
+
+    @Test
+    public void testgrantVnfResourceByJSONException() {
+        String data =
+                "{\"operation_right\": \"increase\",\"vnf_name\": \"vnf_name\",\"vm_list\": [{\"vm_flavor\": {\"storage\": [{\"vol_type\": \"local_volume\",\"vol_size\": \"2\",\"storage_type\": \"local_image\",\"disk_size\": \"100\"}],\"num_cpus\": \"6\",\"mem_size\": \"8\"},\"init_number\": \"1\"}],\"version\": \"version\",\"template_id\": \"template_id\",\"template_name\": \"template_name\",\"plan_id\": \"plan_id\",\"plan_name\": \"plan_name\",\"project_id\": \"project_id\",\"project_name\": \"project_name\",\"creator\": \"creator\",\"status\": \"status\",\"tenant\": \"tenant\",\"parent_tenant\": \"parent_tenant\",\"vnfd_id\": \"vnfd_id\",\"location\": \"location\",\"dr_location\": \"dr_location\",\"nfvo_id\": \"nfvo_id\"}";
+        JSONObject vnfObj = JSONObject.fromObject(data);
+        VnfResourceMgr vnfResourceMgr = new VnfResourceMgr();
+        JSONObject result = vnfResourceMgr.grantVnfResource(vnfObj, "vnfId", "vnfmId");
+
+        JSONObject retJson = new JSONObject();
+        retJson.put("retCode", Constant.REST_FAIL);
+        retJson.put("errorMsg", "params parse exception");
+        assertEquals(retJson, result);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/AuthRoaTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/AuthRoaTest.java
new file mode 100644 (file)
index 0000000..558d43e
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest;
+
+import static org.junit.Assert.assertEquals;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.common.VnfmJsonUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.process.AuthMgr;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONObject;
+
+public class AuthRoaTest {
+
+    private AuthRoa authRoa;
+
+    private AuthMgr authMgr;
+
+    @Before
+    public void setUp() {
+        authRoa = new AuthRoa();
+        authMgr = new AuthMgr();
+        authRoa.setAuthMgr(authMgr);
+    }
+
+    @After
+    public void tearDown() {
+        authRoa = null;
+        authMgr = null;
+    }
+
+    @Test
+    public void testAuthTokenBySubJsonObjectNull() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+        new MockUp<VnfmJsonUtil>() {
+
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest context) {
+                return null;
+            }
+        };
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        String result = authRoa.authToken(mockInstance, mockResInstance);
+
+        assertEquals("Login params insufficient", result);
+    }
+
+    @Test
+    public void testAuthTokenByFail() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest context) {
+                JSONObject subJsonObject = new JSONObject();
+                return (T)subJsonObject;
+            }
+        };
+        new MockUp<AuthMgr>() {
+
+            @Mock
+            public JSONObject authToken(JSONObject params) {
+                JSONObject restJson = new JSONObject();
+                restJson.put("retCode", Constant.REST_FAIL);
+                restJson.put("data", "Fail!");
+                return restJson;
+            }
+        };
+        String result = authRoa.authToken(mockInstance, mockResInstance);
+
+        assertEquals("{\"Information\": \"Fail!\"}", result);
+    }
+
+    @Test
+    public void testAuthTokenByHttpInnerError() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest context) {
+                JSONObject subJsonObject = new JSONObject();
+                return (T)subJsonObject;
+            }
+        };
+        new MockUp<AuthMgr>() {
+
+            @Mock
+            public JSONObject authToken(JSONObject params) {
+                JSONObject restJson = new JSONObject();
+                restJson.put("retCode", Constant.HTTP_INNERERROR);
+                restJson.put("data", "HttpInnerError!");
+                return restJson;
+            }
+        };
+        String result = authRoa.authToken(mockInstance, mockResInstance);
+
+        assertEquals("{\"Information\": \"HttpInnerError!\"}", result);
+    }
+
+    @Test
+    public void testAuthToken() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest context) {
+                JSONObject subJsonObject = new JSONObject();
+                return (T)subJsonObject;
+            }
+        };
+        new MockUp<AuthMgr>() {
+
+            @Mock
+            public JSONObject authToken(JSONObject params) {
+                JSONObject restJson = new JSONObject();
+                restJson.put("retCode", Constant.REST_SUCCESS);
+                JSONObject data = new JSONObject();
+                data.put("accessSession", "accessSession");
+                data.put("userName", "userName");
+                data.put("roaRand", "roaRand");
+                restJson.put("data", data);
+                return restJson;
+            }
+        };
+        String result = authRoa.authToken(mockInstance, mockResInstance);
+
+        assertEquals(
+                "{\"token\": {\"methods\": [\"password\"],\"expires_at\": \"\",\"user\": {\"id\": \"userName\",\"name\": \"userName\"},\"roa_rand\": \"roaRand\"}}",
+                result);
+    }
+
+    @Test
+    public void testDelAuthToken() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+        String result = authRoa.delAuthToken(mockInstance, null, null, mockResInstance);
+
+        JSONObject resultJson = new JSONObject();
+        resultJson.put("Information", "Operation success");
+        assertEquals(resultJson.toString(), result);
+    }
+
+    @Test
+    public void testShakehand() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+        String result = authRoa.shakehand(mockInstance, null, mockResInstance);
+
+        JSONObject resultJson = new JSONObject();
+        resultJson.put("status", "running");
+        resultJson.put("description", "Operation success");
+        assertEquals(resultJson.toString(), result);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/SwaggerRoaTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/SwaggerRoaTest.java
new file mode 100644 (file)
index 0000000..ba68ed8
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.io.IOException;
+
+import org.junit.Test;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 13, 2017
+ */
+public class SwaggerRoaTest {
+
+    @Test
+    public void testApidoc() throws IOException {
+        SwaggerRoa swaggerRoa = new SwaggerRoa();
+        String result = swaggerRoa.apidoc();
+        assertNotNull(result);
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/VnfAdapterResourceRoaTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/VnfAdapterResourceRoaTest.java
new file mode 100644 (file)
index 0000000..75b37f6
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.service.adapter.impl.AdapterResourceManager;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONObject;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 13, 2017
+ */
+public class VnfAdapterResourceRoaTest {
+
+    @Test
+    public void testGetAllCloudInfo() {
+        new MockUp<AdapterResourceManager>() {
+
+            @Mock
+            public JSONObject getAllCloud(String url) {
+                JSONObject resultObj = new JSONObject();
+                resultObj.put("dn", "test");
+                return resultObj;
+            }
+        };
+
+        VnfAdapterResourceRoa vnfAdapter = new VnfAdapterResourceRoa();
+        String result = vnfAdapter.getAllCloudInfo(null);
+        assertEquals("test", result);
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/VnfResourceRoaTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/VnfResourceRoaTest.java
new file mode 100644 (file)
index 0000000..016d373
--- /dev/null
@@ -0,0 +1,268 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest;
+
+import static org.junit.Assert.assertEquals;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.nfvo.vnfmadapter.common.VnfmJsonUtil;
+import org.openo.nfvo.vnfmadapter.common.VnfmUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.process.VnfResourceMgr;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONObject;
+
+public class VnfResourceRoaTest {
+
+    private VnfResourceRoa vnfResourceRoa;
+
+    private VnfResourceMgr vnfResourceMgr;
+
+    @Before
+    public void setUp() {
+        vnfResourceRoa = new VnfResourceRoa();
+        vnfResourceMgr = new VnfResourceMgr();
+        vnfResourceRoa.setVnfResourceMgr(vnfResourceMgr);
+    }
+
+    @After
+    public void tearDown() {
+        vnfResourceRoa = null;
+        vnfResourceMgr = null;
+    }
+
+    @Test
+    public void testGrantVnfResByDataObjectNull() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+        new MockUp<VnfmJsonUtil>() {
+
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest context) {
+                return null;
+            }
+        };
+
+        String result = vnfResourceRoa.grantVnfRes(mockInstance, "vnfId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        restJson.put("data", "Params error");
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testGrantVnfResByGrantObjNull() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+        final JSONObject dataObject = new JSONObject();
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest context) {
+                return (T)dataObject;
+            }
+        };
+        new MockUp<JSONObject>() {
+
+            @Mock
+            public JSONObject getJSONObject(String key) {
+                if(key == "grant") {
+                    return null;
+                }
+                return dataObject;
+            }
+        };
+
+        String result = vnfResourceRoa.grantVnfRes(mockInstance, "vnfId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        restJson.put("data", "Grant param error");
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testGrantVnfRes() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {
+
+            @Mock
+            public String getHeader(String name) {
+                return "127.0.0.1";
+            }
+        };
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+        final JSONObject dataObject = new JSONObject();
+        JSONObject grant = new JSONObject();
+        grant.put("project_id", "project_id");
+        dataObject.put("grant", grant);
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest context) {
+                return (T)dataObject;
+            }
+        };
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public String getVnfmIdByIp(String ip) {
+                return "vnfmId";
+            }
+        };
+
+        new MockUp<VnfResourceMgr>() {
+
+            @Mock
+            public JSONObject grantVnfResource(JSONObject vnfObj, String vnfId, String vnfmId) {
+                JSONObject resultJson = new JSONObject();
+                resultJson.put("retCode", Constant.REST_SUCCESS);
+                JSONObject data = new JSONObject();
+                data.put("data", "success");
+                resultJson.put("data", data);
+                return resultJson;
+            }
+        };
+        String result = vnfResourceRoa.grantVnfRes(mockInstance, "vnfId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_SUCCESS);
+        JSONObject data = new JSONObject();
+        data.put("data", "success");
+        restJson.put("data", data);
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testGrantVnfResByFail() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {
+
+            @Mock
+            public String getHeader(String name) {
+                return "127.0.0.1";
+            }
+        };
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+        final JSONObject dataObject = new JSONObject();
+        JSONObject grant = new JSONObject();
+        grant.put("project_id", "project_id");
+        dataObject.put("grant", grant);
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest context) {
+                return (T)dataObject;
+            }
+        };
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public String getVnfmIdByIp(String ip) {
+                return "vnfmId";
+            }
+        };
+
+        new MockUp<VnfResourceMgr>() {
+
+            @Mock
+            public JSONObject grantVnfResource(JSONObject vnfObj, String vnfId, String vnfmId) {
+                JSONObject resultJson = new JSONObject();
+                resultJson.put("retCode", Constant.REST_FAIL);
+                resultJson.put("data", "Fail!");
+                return resultJson;
+            }
+        };
+        String result = vnfResourceRoa.grantVnfRes(mockInstance, "vnfId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        restJson.put("data", "Fail!");
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testGrantVnfResByDataNull() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {
+
+            @Mock
+            public String getHeader(String name) {
+                return "127.0.0.1";
+            }
+        };
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+        final JSONObject dataObject = new JSONObject();
+        JSONObject grant = new JSONObject();
+        grant.put("project_id", "project_id");
+        dataObject.put("grant", grant);
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest context) {
+                return (T)dataObject;
+            }
+        };
+        new MockUp<VnfmUtil>() {
+
+            @Mock
+            public String getVnfmIdByIp(String ip) {
+                return "vnfmId";
+            }
+        };
+
+        new MockUp<VnfResourceMgr>() {
+
+            @Mock
+            public JSONObject grantVnfResource(JSONObject vnfObj, String vnfId, String vnfmId) {
+                JSONObject resultJson = new JSONObject();
+                resultJson.put("retCode", Constant.REST_FAIL);
+                return resultJson;
+            }
+        };
+        String result = vnfResourceRoa.grantVnfRes(mockInstance, "vnfId");
+
+        JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testNotify() {
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {
+
+            @Mock
+            public String getHeader(String name) {
+                return "127.0.0.1";
+            }
+        };
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+        String result = vnfResourceRoa.notify(mockInstance);
+
+        JSONObject restJson = new JSONObject();
+        restJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
+        assertEquals(restJson.toString(), result);
+    }
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/VnfRoaTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/VnfRoaTest.java
new file mode 100644 (file)
index 0000000..08e28bc
--- /dev/null
@@ -0,0 +1,579 @@
+/*
+ * Copyright 2016-2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+import org.openo.nfvo.vnfmadapter.common.VnfmJsonUtil;
+import org.openo.nfvo.vnfmadapter.service.constant.Constant;
+import org.openo.nfvo.vnfmadapter.service.process.VnfMgr;
+
+import mockit.Mock;
+import mockit.MockUp;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+public class VnfRoaTest {
+
+    private VnfRoa vnfRoa;
+
+    private VnfMgr vnfMgr;
+
+    @Before
+    public void setUp() {
+        vnfRoa = new VnfRoa();
+        vnfMgr = new VnfMgr();
+        vnfRoa.setVnfMgr(vnfMgr);
+    }
+
+    @After
+    public void tearDown() {
+        vnfRoa = null;
+        vnfMgr = null;
+    }
+
+    @Test
+    public void testAddVnf() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_SUCCESS);
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfMgr>() {
+
+            @Mock
+            public JSONObject addVnf(JSONObject subJsonObject, String vnfmId) {
+                JSONObject retJson = new JSONObject();
+                retJson.put("id", "123");
+                restJson.put("data", retJson);
+                return restJson;
+            }
+        };
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.addVnf(mockInstance, mockResInstance, "vnfmId");
+
+        JSONObject retJson = new JSONObject();
+        retJson.put("id", "123");
+        assertEquals(retJson.toString(), result);
+
+    }
+
+    @Test
+    public void testAddVnfFail() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfMgr>() {
+
+            @Mock
+            public JSONObject addVnf(JSONObject subJsonObject, String vnfmId) {
+                return restJson;
+            }
+        };
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.addVnf(mockInstance, mockResInstance, "vnfmId");
+
+        assertEquals(restJson.toString(), result);
+
+    }
+
+    @Test
+    public void testAddVnfBySubJsonObjectNull() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest context) {
+                return null;
+            }
+        };
+
+        String result = vnfRoa.addVnf(mockInstance, mockResInstance, "vnfmId");
+
+        assertEquals(restJson.toString(), result);
+
+    }
+
+    @Test
+    public void testDelVnf() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_SUCCESS);
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfMgr>() {
+
+            @Mock
+            public JSONObject deleteVnf(String vnfId, String vnfmId, JSONObject vnfObject) {
+                JSONObject retJson = new JSONObject();
+                retJson.put("id", "123");
+                restJson.put("data", retJson);
+                return restJson;
+            }
+        };
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.delVnf("vnfmId", mockResInstance, "vnfId", mockInstance);
+        JSONObject retJson = new JSONObject();
+        retJson.put("id", "123");
+        assertEquals(retJson.toString(), result);
+    }
+
+    @Test
+    public void testDelVnfByVnfIdIsEmpty() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.delVnf("vnfmId", mockResInstance, "", mockInstance);
+
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testDelVnfByVnfmIdIsEmpty() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.delVnf("", mockResInstance, "vnfId", mockInstance);
+
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testDelVnfByVnfIdVnfmIdEmpty() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.delVnf("", mockResInstance, "", mockInstance);
+
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testDelVnfFail() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfMgr>() {
+
+            @Mock
+            public JSONObject deleteVnf(String vnfId, String vnfmId, JSONObject vnfObject) {
+                return restJson;
+            }
+        };
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.delVnf("vnfmId", mockResInstance, "vnfId", mockInstance);
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testGetVnfByVnfIdIsEmpty() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.getVnf("vnfmId", mockResInstance, "", mockInstance);
+
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testGetVnfByVnfmIdIsEmpty() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.getVnf("", mockResInstance, "vnfId", mockInstance);
+
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testGetVnfFail() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfMgr>() {
+
+            @Mock
+            public JSONObject getVnf(String vnfId, String vnfmId) {
+                return restJson;
+            }
+        };
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.getVnf("vnfmId", mockResInstance, "vnfId", mockInstance);
+        assertEquals(restJson.toString(), result);
+    }
+
+    @Test
+    public void testGetVnf() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_SUCCESS);
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfMgr>() {
+
+            @Mock
+            public JSONObject getVnf(String vnfId, String vnfmId) {
+                JSONObject retJson = new JSONObject();
+                JSONObject basicInfoJson = new JSONObject();
+                basicInfoJson.put("vnfInstanceId", "123");
+                basicInfoJson.put("vnfInstanceName", "1");
+                basicInfoJson.put("vnfInstanceDescription", "vFW");
+                basicInfoJson.put("vnfdId", "1");
+                basicInfoJson.put("vnfdPackageId", "vFW");
+                basicInfoJson.put("version", "vFW");
+                basicInfoJson.put("vnfProvider", "hw");
+                basicInfoJson.put("vnfType", "fw");
+                basicInfoJson.put("vnfStatus", "active");
+                retJson.put("vnfInfo", basicInfoJson);
+                retJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
+                return retJson;
+            }
+        };
+
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.getVnf("vnfmId", mockResInstance, "vnfId", mockInstance);
+        JSONObject basicInfoJson = new JSONObject();
+        JSONObject retJson = new JSONObject();
+        basicInfoJson.put("vnfInstanceId", "123");
+        basicInfoJson.put("vnfInstanceName", "1");
+        basicInfoJson.put("vnfInstanceDescription", "vFW");
+        basicInfoJson.put("vnfdId", "1");
+        basicInfoJson.put("vnfdPackageId", "vFW");
+        basicInfoJson.put("version", "vFW");
+        basicInfoJson.put("vnfProvider", "hw");
+        basicInfoJson.put("vnfType", "fw");
+        basicInfoJson.put("vnfStatus", "active");
+        retJson.put("vnfInfo", basicInfoJson);
+        assertEquals(retJson.toString(), result);
+    }
+
+    @Test
+    public void testGetJobByJobIdNull() throws ServiceException {
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        String result = vnfRoa.getJob(null, null, mockResInstance, "1111");
+        assertEquals("{}", result);
+    }
+
+    @Test
+    public void testGetJobByVnfmIdNull() throws ServiceException {
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        String result = vnfRoa.getJob("123", null, mockResInstance, "1111");
+        assertEquals("{}", result);
+    }
+
+    @Test
+    public void testGetJobByVnfMgrFail() throws ServiceException {
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+        new MockUp<VnfMgr>() {
+
+            @Mock
+            public JSONObject getJob(String jobId, String vnfmId) {
+                JSONObject restJson = new JSONObject();
+                restJson.put(Constant.RETCODE, Constant.REST_FAIL);
+                return restJson;
+            }
+        };
+        String result = vnfRoa.getJob("123", "1234", mockResInstance, "1111");
+        assertEquals("{\"retCode\":-1}", result);
+    }
+
+    @Test
+    public void testGetJob() throws ServiceException {
+        new MockUp<VnfMgr>() {
+
+            @Mock
+            public JSONObject getJob(String jobId, String vnfmId) {
+                JSONObject restJson = new JSONObject();
+                JSONArray data = new JSONArray();
+                JSONObject obj = new JSONObject();
+                obj.put("id", "11111");
+                obj.put("status", "Active");
+                data.add(obj);
+                restJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
+                restJson.put("data", data);
+                return restJson;
+            }
+        };
+
+        String result = vnfRoa.getJob("123", "1234", null, "1111");
+        assertNotNull(result);
+    }
+
+    @Test
+    public void testScaleVnf() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_SUCCESS);
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfMgr>() {
+
+            @Mock
+            public JSONObject scaleVNF(JSONObject vnfObject, String vnfmId, String vnfInstanceId) {
+                JSONObject retJson = new JSONObject();
+                retJson.put("id", "123");
+                restJson.put("data", retJson);
+                return restJson;
+            }
+        };
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+
+        String result = vnfRoa.scaleVnf(mockInstance,mockResInstance,"id","id");
+
+        JSONObject retJson = new JSONObject();
+        retJson.put("id", "123");
+        assertEquals(retJson.toString(), result);
+
+    }
+    @Test
+    public void testScaleVnfFail() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfMgr>() {
+
+            @Mock
+            public JSONObject scaleVNF(JSONObject vnfObject, String vnfmId, String vnfInstanceId) {
+                JSONObject retJson = new JSONObject();
+                retJson.put("id", "123");
+                restJson.put("data", retJson);
+                return restJson;
+            }
+        };
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return (T)restJson;
+            }
+        };
+        String result = vnfRoa.scaleVnf(mockInstance,mockResInstance,"id","id");
+
+        assertEquals(restJson.toString(), result);
+
+    }
+
+    @Test
+    public void testScaleVnfFail2() throws ServiceException {
+        final JSONObject restJson = new JSONObject();
+        restJson.put("retCode", Constant.REST_FAIL);
+        MockUp<HttpServletRequest> proxyStub = new MockUp<HttpServletRequest>() {};
+        HttpServletRequest mockInstance = proxyStub.getMockInstance();
+
+        MockUp<HttpServletResponse> proxyResStub = new MockUp<HttpServletResponse>() {};
+        HttpServletResponse mockResInstance = proxyResStub.getMockInstance();
+
+        new MockUp<VnfMgr>() {
+
+            @Mock
+            public JSONObject scaleVNF(JSONObject vnfObject, String vnfmId, String vnfInstanceId) {
+                JSONObject retJson = new JSONObject();
+                retJson.put("id", "123");
+                restJson.put("data", retJson);
+                return restJson;
+            }
+        };
+        new MockUp<VnfmJsonUtil>() {
+
+            @SuppressWarnings("unchecked")
+            @Mock
+            public <T> T getJsonFromContexts(HttpServletRequest VNFreq) {
+                return null;
+            }
+        };
+        String result = vnfRoa.scaleVnf(mockInstance,mockResInstance,"id","id");
+
+        assertEquals(restJson.toString(), result);
+
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ExceptionMessageTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ExceptionMessageTest.java
new file mode 100644 (file)
index 0000000..ca66058
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest.exceptionmapper;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.Test;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 13, 2017
+ */
+public class ExceptionMessageTest {
+
+    @Test
+    public void testToString() {
+        ExceptionMessage message = new ExceptionMessage();
+        message.setErrorCode("1");
+        message.setHttpCode(200);
+        message.setMessage("Success!");
+        String str = message.toString();
+        assertNotNull(str);
+    }
+
+    @Test
+    public void testGetErrorCode() {
+        ExceptionMessage message = new ExceptionMessage();
+        message.setErrorCode("1");
+        String str = message.getErrorCode();
+        assertEquals("1", str);
+    }
+
+    @Test
+    public void testHttpCode() {
+        ExceptionMessage message = new ExceptionMessage();
+        message.setHttpCode(200);
+        int str = message.getHttpCode();
+        assertEquals(200, str);
+    }
+
+    @Test
+    public void testGetMessage() {
+        ExceptionMessage message = new ExceptionMessage();
+        message.setMessage("Success!");
+        String str = message.getMessage();
+        assertEquals("Success!", str);
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/GenericExceptionMapperTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/GenericExceptionMapperTest.java
new file mode 100644 (file)
index 0000000..370cbc8
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest.exceptionmapper;
+
+import static org.junit.Assert.assertNotNull;
+
+import javax.ws.rs.core.Response;
+
+import org.junit.Test;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 13, 2017
+ */
+public class GenericExceptionMapperTest {
+
+    @Test
+    public void testToResponse() {
+        GenericExceptionMapper excep = new GenericExceptionMapper();
+        Exception exception = new Exception("message");
+        Response res = excep.toResponse(exception);
+        assertNotNull(res);
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ServiceExceptionMapperTest.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/service/rest/exceptionmapper/ServiceExceptionMapperTest.java
new file mode 100644 (file)
index 0000000..c9deb39
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.service.rest.exceptionmapper;
+
+import static org.junit.Assert.assertNotNull;
+
+import javax.ws.rs.core.Response;
+
+import org.junit.Test;
+import org.openo.baseservice.remoteservice.exception.ServiceException;
+
+/**
+ * <br>
+ * <p>
+ * </p>
+ * 
+ * @author
+ * @version NFVO 0.5 Jan 13, 2017
+ */
+public class ServiceExceptionMapperTest {
+
+    @Test
+    public void testToResponse() {
+        ServiceExceptionMapper mapper = new ServiceExceptionMapper();
+        ServiceException exception = new ServiceException();
+        Response res = mapper.toResponse(exception);
+        assertNotNull(res);
+    }
+
+}
diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/testutils/JsonUtil.java b/huawei/vnfmadapter/VnfmadapterService/service/src/test/java/org/openo/nfvo/vnfmadapter/testutils/JsonUtil.java
new file mode 100644 (file)
index 0000000..c3f8854
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.openo.nfvo.vnfmadapter.testutils;
+
+
+import java.io.IOException;
+
+import org.codehaus.jackson.map.DeserializationConfig.Feature;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.type.TypeReference;
+
+import net.sf.json.JSON;
+
+public final class JsonUtil {
+    private static final ObjectMapper MAPPER = new ObjectMapper();
+
+    public static <T> T unMarshal(String jsonstr, Class<T> type) throws IOException {
+        return MAPPER.readValue(jsonstr, type);
+    }
+
+    public static <T> T unMarshal(String jsonstr, TypeReference<T> type) throws IOException {
+        return MAPPER.readValue(jsonstr, type);
+    }
+
+    public static String marshal(Object srcObj) throws IOException {
+        return srcObj instanceof JSON ? srcObj.toString() : MAPPER.writeValueAsString(srcObj);
+    }
+
+    public static ObjectMapper getMapper() {
+        return MAPPER;
+    }
+
+    static {
+        MAPPER.setDeserializationConfig(
+                MAPPER.getDeserializationConfig().without(new Feature[] { Feature.FAIL_ON_UNKNOWN_PROPERTIES }));
+    }
+}
\ No newline at end of file
diff --git a/huawei/vnfmadapter/pom.xml b/huawei/vnfmadapter/pom.xml
new file mode 100644 (file)
index 0000000..c1cd25b
--- /dev/null
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2016, Huawei Technologies Co., Ltd.
+
+    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.
+ -->
+<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">
+    <parent>
+          <groupId>org.openo.nfvo</groupId>
+        <artifactId>nfvo-root</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+        <relativePath>../../../../..</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.openo.nfvo</groupId>
+    <artifactId>vnfmadapter</artifactId>
+    <version>1.1.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <name>nfvo/drivers/vnfm/svnfm/huawei/vnfmadapter</name>
+    <description>nfvo vnfmadapter</description>
+    <modules>
+        <module>VnfmadapterService</module>
+    </modules>
+
+    <build>
+        <plugins>
+            <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <version>2.19</version>
+                    <configuration>
+                        <testFailureIgnore>true</testFailureIgnore>
+                        <includes>
+                            <include>**/*Spec*</include>
+                            <include>**/Test*.java</include>
+                            <include>**/*Test.java</include>
+                            <include>**/*TestCase.java</include>
+                            <include>**/Test*.scala</include>
+                            <include>**/*Test.scala</include>
+                            <include>**/*TestCase.scala</include>
+                        </includes>
+                    </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>cobertura-maven-plugin</artifactId>
+                <version>2.7</version>
+                <configuration>
+                    <formats>
+                        <format>html</format>
+                        <format>xml</format>
+                    </formats>
+                    <instrumentation>
+                        <excludes>
+                            <exclude>org/**/*Test.class</exclude>
+                        </excludes>
+                    </instrumentation>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>