/*-
* ============LICENSE_START=======================================================
* ONAP - SO
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
*/
package org.openecomp.mso.apihandlerinfra;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.net.URI;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import mockit.Expectations;
import mockit.Mock;
import mockit.MockUp;
import mockit.Mocked;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolVersion;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.entity.BasicHttpEntity;
import org.apache.http.message.BasicHttpResponse;
import org.hibernate.Session;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
import org.openecomp.mso.apihandler.common.CamundaClient;
import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkRequest;
import org.openecomp.mso.db.AbstractSessionFactoryManager;
import org.openecomp.mso.db.catalog.CatalogDatabase;
import org.openecomp.mso.db.catalog.beans.NetworkRecipe;
import org.openecomp.mso.db.catalog.beans.VfModule;
import org.openecomp.mso.db.catalog.beans.VnfResource;
import org.openecomp.mso.properties.MsoPropertiesFactory;
import org.openecomp.mso.requestsdb.InfraActiveRequests;
import org.openecomp.mso.requestsdb.InfraRequests;
import org.openecomp.mso.requestsdb.RequestsDatabase;
public class NetworkRequestHandlerTest {
private static final String REQ_XML = " e1fc3ed3-31e5-48a8-913b-23184c1e9443CREATE e1fc3ed3-31e5-48a8-913b-23184c1e9443 e1fc3ed3-31e5-48a8-913b-23184c1e9443 nwInstanceName nwModelNamee1fc3ed3-31e5-48a8-913b-23184c1e9443 e1fc3ed3-31e5-48a8-913b-23184c1e9443 e1fc3ed3-31e5-48a8-913b-23184c1e9443e1fc3ed3-31e5-48a8-913b-23184c1e9443 false1802e1fc3ed3-31e5-48a8-913b-23184c1e9443 ";
private static MockUp mockRDB;
private static MockUp mockCDB;
private static MockUp mockCamundaClient;
NetworkRequestHandler handler = null;
UriInfo uriInfo = null;
@Before
public void setup() throws Exception{
uriInfo = Mockito.mock(UriInfo.class);
Class> clazz = NetworkRequestHandler.class;
handler = (NetworkRequestHandler)clazz.newInstance();
Field f1 = handler.getClass().getDeclaredField("uriInfo");
f1.setAccessible(true);
f1.set(handler, uriInfo);
}
@BeforeClass
public static void setUp() throws Exception {
MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory();
msoPropertiesFactory.removeAllMsoProperties();
msoPropertiesFactory.initializeMsoProperties(Constants.MSO_PROP_APIHANDLER_INFRA, "src/test/resources/mso.apihandler-infra.properties");
mockRDB = new MockUp() {
@Mock
public InfraActiveRequests checkDuplicateByVnfName (String vnfName, String action, String requestType) {
return null;
}
@Mock
public int updateInfraStatus (String requestId, String requestStatus, long progress, String lastModifiedBy) {
return 1;
}
@Mock
public int updateInfraFinalStatus (String requestId, String requestStatus, String statusMessage, long progress, String responseBody, String lastModifiedBy) {
return 1;
}
};
mockCDB = new MockUp() {
@Mock
public NetworkRecipe getNetworkRecipe (String networkType, String action, String serviceType) {
final NetworkRecipe networkRecipe = new NetworkRecipe();
networkRecipe.setOrchestrationUri("test/vnf");
networkRecipe.setRecipeTimeout(180);
return networkRecipe;
}
@Mock
public VfModule getVfModuleType(String type, String version) {
final VfModule vfModule = new VfModule();
return vfModule;
}
@Mock
public VnfResource getVnfResource (String vnfType, String serviceVersion) {
final VnfResource vnfResource = new VnfResource();
return vnfResource;
}
};
mockCamundaClient = new MockUp() {
@Mock
public HttpResponse post(String camundaReqXML, String requestId,
String requestTimeout, String schemaVersion, String serviceInstanceId, String action)
throws ClientProtocolException, IOException {
ProtocolVersion pv = new ProtocolVersion("HTTP",1,1);
HttpResponse resp = new BasicHttpResponse(pv,200, "test response");
BasicHttpEntity entity = new BasicHttpEntity();
String body = "{\"response\":\"success\",\"message\":\"success\"}";
InputStream instream = new ByteArrayInputStream(body.getBytes());
entity.setContent(instream);
resp.setEntity(entity);
return resp;
}
};
}
@AfterClass
public static void tearDown() {
mockRDB.tearDown();
mockCDB.tearDown();
mockCamundaClient.tearDown();
}
@Test
public void manageVnfRequestTest(@Mocked AbstractSessionFactoryManager sessionFactoryManager,
@Mocked Session session){
new Expectations() {{
sessionFactoryManager.getSessionFactory().openSession(); result = session;
}};
Mockito.when(uriInfo.getRequestUri()).thenReturn(URI.create("http://localhost:8080/test"));
Response resp = handler.manageNetworkRequest(REQ_XML, "v2");
assertTrue(null != resp);
}
@Test
public void manageVnfRequestTestV1(@Mocked AbstractSessionFactoryManager sessionFactoryManager,
@Mocked Session session){
new Expectations() {{
sessionFactoryManager.getSessionFactory().openSession(); result = session;
}};
Mockito.when(uriInfo.getRequestUri()).thenReturn(URI.create("http://localhost:8080/test"));
Response resp = handler.manageNetworkRequest(REQ_XML, "v1");
assertTrue(null != resp);
}
@Test
public void manageVnfRequestTestV3(@Mocked AbstractSessionFactoryManager sessionFactoryManager,
@Mocked Session session){
new Expectations() {{
sessionFactoryManager.getSessionFactory().openSession(); result = session;
}};
Mockito.when(uriInfo.getRequestUri()).thenReturn(URI.create("http://localhost:8080/test"));
Response resp = handler.manageNetworkRequest(REQ_XML, "v3");
assertTrue(null != resp);
}
@Test
public void manageVnfRequestTestInvalidVersion(){
Response resp = handler.manageNetworkRequest(REQ_XML, "v249");
assertTrue(null != resp);
}
@Test
public void manageVnfRequest2Test(){
Mockito.when(uriInfo.getRequestUri())
.thenReturn(URI.create("http://localhost:8080/test"));
new MockUp() {
@Mock
public synchronized final boolean getNoPropertiesState() {
return false;
}
};
Response resp = handler.manageNetworkRequest(REQ_XML, "v2");
assertTrue(null != resp);
}
@Test
public void fillNetworkRequestTestV1(){
NetworkRequest qr = new NetworkRequest();
InfraRequests ar = new InfraRequests();
ar.setVnfId("1003");
ar.setVnfName("vnf");
ar.setVnfType("vnt");
ar.setTenantId("48889690");
ar.setProvStatus("uuu");
ar.setVolumeGroupName("volume");
ar.setVolumeGroupId("38838");
ar.setServiceType("vnf");
ar.setAicNodeClli("djerfe");
ar.setAaiServiceId("599499");
ar.setAicCloudRegion("south");
ar.setVfModuleName("m1");
ar.setVfModuleId("39949");
ar.setVfModuleModelName("test");
ar.setAaiServiceId("37728");
ar.setVnfParams("test");
handler.fillNetworkRequest(qr, ar, "v1");
String param = (String)qr.getNetworkParams();
assertTrue(param.equals("test"));
}
@Test
public void fillNetworkRequestTestV2(){
NetworkRequest qr = new NetworkRequest();
InfraRequests ar = new InfraRequests();
ar.setVnfId("1003");
ar.setVnfName("vnf");
ar.setVnfType("vnt");
ar.setTenantId("48889690");
ar.setProvStatus("uuu");
ar.setVolumeGroupName("volume");
ar.setVolumeGroupId("38838");
ar.setServiceType("vnf");
ar.setAicNodeClli("djerfe");
ar.setAaiServiceId("599499");
ar.setAicCloudRegion("south");
ar.setVfModuleName("m1");
ar.setVfModuleId("39949");
ar.setVfModuleModelName("test");
ar.setAaiServiceId("37728");
ar.setVnfParams("test");
handler.fillNetworkRequest(qr, ar, "v2");
String param = (String)qr.getNetworkParams();
assertTrue(param.equals("test"));
}
@Test
public void fillNetworkRequestTestV3(){
NetworkRequest qr = new NetworkRequest();
InfraRequests ar = new InfraRequests();
ar.setVnfId("1003");
ar.setVnfName("vnf");
ar.setVnfType("vnt");
ar.setTenantId("48889690");
ar.setProvStatus("uuu");
ar.setVolumeGroupName("volume");
ar.setVolumeGroupId("38838");
ar.setServiceType("vnf");
ar.setAicNodeClli("djerfe");
ar.setAaiServiceId("599499");
ar.setAicCloudRegion("south");
ar.setVfModuleName("m1");
ar.setVfModuleId("39949");
ar.setVfModuleModelName("test");
ar.setAaiServiceId("37728");
ar.setVnfParams("test");
handler.fillNetworkRequest(qr, ar, "v3");
String param = (String)qr.getNetworkParams();
assertTrue(param.equals("test"));
}
@Test
public void queryFiltersTest(){
new MockUp() {
@Mock
public List getRequestListFromInfraActive (String queryAttributeName,
String queryValue,
String requestType) {
List list = new ArrayList<>();
InfraActiveRequests req = new InfraActiveRequests();
req.setAaiServiceId("299392");
req.setAction("CREATE");
req.setRequestStatus("COMPLETE");
req.setProgress(10001L);
req.setSource("test");
req.setStartTime(new Timestamp(10020100));
req.setEndTime(new Timestamp(20020100));
req.setStatusMessage("message");
list.add(req);
return list;
}
};
Response resp = handler.queryFilters("networkType", "serviceType", "aicNodeClli", "tenantId", "v1");
assertTrue(resp.getEntity().toString() != null);
}
@Test
public void getRequestTest(){
new MockUp() {
@Mock
public InfraActiveRequests getRequestFromInfraActive (String requestId, String requestType) {
InfraActiveRequests req = new InfraActiveRequests();
req.setAaiServiceId("299392");
req.setAction("CREATE");
req.setRequestStatus("COMPLETE");
req.setProgress(10001L);
req.setSource("test");
req.setStartTime(new Timestamp(10020100));
req.setEndTime(new Timestamp(20020100));
req.setStatusMessage("message");
return req;
}
};
Response resp = handler.getRequest("388293", "v1");
assertTrue(resp.getEntity().toString() != null);
}
}