6170d9bbad8db211ec0be20489435fd2a16b1c99
[vnfsdk/refrepo.git] /
1 /**
2  * Copyright 2017 Huawei Technologies Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.onap.vnfsdk.marketplace.onboarding.hooks.validatelifecycle;
17
18 import java.io.File;
19 import java.util.ArrayList;
20 import java.util.List;
21
22 import org.onap.vnfsdk.marketplace.common.CommonConstant;
23 import org.onap.vnfsdk.marketplace.common.FileUtil;
24 import org.onap.vnfsdk.marketplace.common.ToolUtil;
25 import org.onap.vnfsdk.marketplace.db.entity.PackageData;
26 import org.onap.vnfsdk.marketplace.entity.EnumOperationStatus;
27 import org.onap.vnfsdk.marketplace.entity.EnumResult;
28 import org.onap.vnfsdk.marketplace.onboarding.entity.OnBoardingOperResult;
29 import org.onap.vnfsdk.marketplace.onboarding.entity.OnBoardingResult;
30 import org.onap.vnfsdk.marketplace.onboarding.entity.OnBoradingRequest;
31 import org.onap.vnfsdk.marketplace.onboarding.entity.ResultKey;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 public class LifecycleTestHook
36 {
37     private static final Logger logger = LoggerFactory.getLogger(LifecycleTestHook.class);
38
39     /**
40      * Start Executing Function test
41      * @param onBoradingReq
42      * @return
43      */
44     public int exec(OnBoradingRequest onBoradingReq)
45     {
46         logger.info("OnboradingRequest Lifecycle Request received for Package:" + onBoradingReq.getCsarId() + " Path:"+ onBoradingReq.getPackagePath());
47
48         buildResultPath(onBoradingReq);
49
50         OnBoardingResult olifecycleTestResult = new OnBoardingResult();
51         buildlifecycleTestResponse(onBoradingReq,olifecycleTestResult);
52         updateResult(olifecycleTestResult);
53
54         if(null == onBoradingReq.getCsarIdCatalouge() || onBoradingReq.getCsarIdCatalouge().isEmpty())
55         {
56             olifecycleTestResult.setOperFinished(true);
57             olifecycleTestResult.setOperStatus(EnumResult.FAIL.getIndex());
58             buildFuncTestResponse(olifecycleTestResult,CommonConstant.LifeCycleTest.LIFECYCLE_TEST_EXEC,EnumOperationStatus.FAILED.getIndex());
59             updateResult(olifecycleTestResult);
60             return EnumResult.FAIL.getIndex();
61         }
62
63         LifeCycleTestReq oLifeCycleTestReq = new LifeCycleTestReq();
64         populateLifeCycleReq(onBoradingReq,oLifeCycleTestReq);
65
66
67         //STEP 2: Execute Life Cycle Test and Get Result Back !!!!
68         //---------------------------------------------------------
69         String lifecycleTestResultKey = LifecycleTestExceutor.execlifecycleTest(onBoradingReq,oLifeCycleTestReq);
70         if(null == lifecycleTestResultKey)
71         {
72             olifecycleTestResult.setOperFinished(true);
73             olifecycleTestResult.setOperStatus(EnumResult.FAIL.getIndex());
74             buildFuncTestResponse(olifecycleTestResult,CommonConstant.LifeCycleTest.LIFECYCLE_TEST_EXEC,EnumOperationStatus.FAILED.getIndex());
75             updateResult(olifecycleTestResult);
76             return EnumResult.FAIL.getIndex();
77         }
78
79         olifecycleTestResult.setOperFinished(true);
80         olifecycleTestResult.setOperStatus(EnumResult.SUCCESS.getIndex());
81         buildFuncTestResponse(olifecycleTestResult,CommonConstant.LifeCycleTest.LIFECYCLE_TEST_EXEC,EnumOperationStatus.SUCCESS.getIndex());
82         updateResult(olifecycleTestResult);
83
84         //STEP 3: Store FuncTest key to get FuncTest Results
85         //-------------------------------------------------
86         storelifecycleResultKey(onBoradingReq,lifecycleTestResultKey);
87
88         return (olifecycleTestResult.getOperStatus() == EnumResult.SUCCESS.getIndex())
89                 ? EnumResult.SUCCESS.getIndex() : EnumResult.FAIL.getIndex();
90     }
91
92     private void populateLifeCycleReq(OnBoradingRequest onBoradingReq, LifeCycleTestReq oLifeCycleTestReq)
93     {
94         oLifeCycleTestReq.setCsarId(onBoradingReq.getCsarId());
95         oLifeCycleTestReq.setLabVimId(oLifeCycleTestReq.getLabVimId());
96
97         List<String> vimIds = new ArrayList<>();
98         oLifeCycleTestReq.setVimIds(vimIds);
99     }
100
101     /**
102      *
103      * @param onBoradingReq
104      */
105     private void buildResultPath(OnBoradingRequest onBoradingReq)
106     {
107         String filePath = getResultStorePath() + File.separator + onBoradingReq.getCsarId();
108         if(!FileUtil.checkFileExists(filePath))
109         {
110             FileUtil.createDirectory(filePath);
111         }
112     }
113
114     /**
115      * Store Function test Execution Results
116      * @param oFuncTestResult
117      */
118     private void updateResult(OnBoardingResult oFuncTestResult)
119     {
120         //STore Results to DB(Currently we will make JSON and Store JSON to Package Path)
121         //-------------------------------------------------------------------------------
122         logger.info("Lifecycle test Status for Package Id:" + oFuncTestResult.getCsarId() + ", Result:" + ToolUtil.objectToString(oFuncTestResult));
123         String filePath = getResultStorePath()  + File.separator  + oFuncTestResult.getCsarId() + File.separator + "lifecycleTest.json";
124         FileUtil.writeJsonDatatoFile(filePath,oFuncTestResult);
125     }
126
127     /**
128      * Build Function Test Response
129      * @param onBoradingReq
130      * @param oFuncTestResult
131      */
132     private void buildlifecycleTestResponse(OnBoradingRequest onBoradingReq, OnBoardingResult oTestResult)
133     {
134         oTestResult.setOperFinished(false);
135         oTestResult.setCsarId(onBoradingReq.getCsarId());
136         oTestResult.setOperTypeId(CommonConstant.LifeCycleTest.LIFECYCLE_TEST_OPERTYPE_ID);
137
138         OnBoardingOperResult lifecycleTestExec = new OnBoardingOperResult();
139         lifecycleTestExec.setOperId(CommonConstant.LifeCycleTest.LIFECYCLE_TEST_EXEC);
140         lifecycleTestExec.setStatus(EnumOperationStatus.NOTSTARTED.getIndex());
141
142         List<OnBoardingOperResult> operResult = new ArrayList<>();
143         operResult.add(lifecycleTestExec);
144         oTestResult.setOperResult(operResult);
145     }
146
147     public static OnBoardingResult getOnBoardingResult(PackageData packageData)
148     {
149         String filePath = getResultStorePath()  + File.separator + packageData.getCsarId() +File.separator + "lifecycleTest.json";
150         logger.info("On Boarding Status for Package Id:" + packageData.getCsarId() + ", Result Path:" + filePath);
151
152         return (OnBoardingResult)FileUtil.readJsonDatafFromFile(filePath,OnBoardingResult.class);
153     }
154
155     /**
156      * Store Function Test Result key
157      * @param onBoradingReq
158      * @param resultKey
159      */
160     private void storelifecycleResultKey(OnBoradingRequest onBoradingReq,String resultKey)
161     {
162         //Currently we will make JSON and Store JSON to Package Path)
163         //-------------------------------------------------------------------------------
164         String filePath = getResultStorePath() + File.separator + onBoradingReq.getCsarId() + File.separator + "lifecycleTestResultKey.json";
165
166         logger.info("Function test Results Key for Package Id:" + onBoradingReq.getCsarId() + ", Key:" + resultKey + " Path" + filePath);
167
168         ResultKey oResultKey = new ResultKey();
169         oResultKey.setCsarId(onBoradingReq.getCsarId());
170         oResultKey.setOperTypeId(CommonConstant.LifeCycleTest.LIFECYCLE_TEST_OPERTYPE_ID);
171         oResultKey.setKey(resultKey);
172
173         FileUtil.writeJsonDatatoFile(filePath,oResultKey);
174     }
175
176     private static String getResultStorePath()
177     {
178         return org.onap.vnfsdk.marketplace.filemanage.http.ToolUtil.getHttpServerAbsolutePath();
179     }
180
181     private void buildFuncTestResponse(OnBoardingResult oFuncTestResult, String opreKey, int operStatusVal)
182     {
183         List<OnBoardingOperResult>  operStatusList = oFuncTestResult.getOperResult();
184         for(OnBoardingOperResult operObj: operStatusList)
185         {
186             if(operObj.getOperId().equalsIgnoreCase(opreKey))
187             {
188                 operObj.setStatus(operStatusVal);
189                 break;
190             }
191         }
192     }
193 }
194