The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
+## [2.1.9] - 2022/09/01
+ - [DCAEGEN2-3148](https://jira.onap.org/browse/DCAEGEN2-3148) - Modify payload for ANR closedloop to align with A1 based action
+
## [2.1.8] - 2022/08/31
- [DCAEGEN2-3222](https://jira.onap.org/browse/DCAEGEN2-3222) - dcaegen2-services-son-handler vulnerability updates
-## [2.1.7] - 2021/05/11
+## [2.1.7] - 2022/05/11
- [DCAEGEN2-3150](https://jira.onap.org/browse/DCAEGEN2-3150) - Fix bug in handling FM notification
## [2.1.6] - 2022/02/07
<groupId>org.onap.dcaegen2.services.son-handler</groupId>
<artifactId>son-handler</artifactId>
<name>dcaegen2-services-son-handler</name>
- <version>2.1.8-SNAPSHOT</version>
+ <version>2.1.9-SNAPSHOT</version>
<!--parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version> </parent -->
"PCI_SDNR_TARGET_NAME": "SDNR",
"PCI_OPTMIZATION_ALGO_CATEGORY_IN_OOF": "OOF-PCI-OPTIMIZATION",
"PCI_NEIGHBOR_CHANGE_CLUSTER_TIMEOUT_IN_SECS": 60,
- "PCI_MODCONFIGANR_POLICY_NAME": "ControlLoop-vSONH-7d4baf04-8875-4d1f-946d-06b874048b61",
- "PCI_MODCONFIG_POLICY_NAME": "ControlLoop-vPCI-fb41f388-a5f2-11e8-98d0-529269fb1459"
+ "PCI_MODCONFIGANR_POLICY_NAME": "ControlLoop-SONA1-7d4baf04-8875-4d1f-946d-06b874048b61",
+ "PCI_MODCONFIG_POLICY_NAME": "ControlLoop-SONO1-fb41f388-a5f2-11e8-98d0-529269fb1459"
},
"type_version": "1.0.0",
"version": "1.0.0",
private String getNbrListUrl;
private String getPciUrl;
private String getPnfUrl;
+ private String getRicIdUrl;
private String oofService;
private String oofEndpoint;
private String cg;
public void setPolicyFixedPciTimeInterval(long policyFixedPciTimeInterval) {
this.policyFixedPciTimeInterval = policyFixedPciTimeInterval;
}
-
+
public String getNfNamingCode() {
return nfNamingCode;
}
this.getPnfUrl = getPnfUrl;
}
+ public void setGetRicIdUrl(String getRicIdUrl) {
+ this.getRicIdUrl = getRicIdUrl;
+ }
+
+ public String getGetRicIdUrl() {
+ return getRicIdUrl;
+ }
+
public static void setInstance(Configuration instance) {
Configuration.instance = instance;
}
return "Configuration [pgHost=" + pgHost + ", pgPort=" + pgPort + ", pgUsername=" + pgUsername + ", pgPassword="
+ pgPassword + ", dmaapServers=" + dmaapServers + ", configDbService=" + configDbService
+ ", cpsServiceUrl=" + cpsServiceUrl + ", CpsUsername=" + CpsUsername + ",CpsPassword=" + CpsPassword + ",ConfigClientType=" + ConfigClientType + ", getCellDataUrl=" + getCellDataUrl + ", getNbrListUrl="
- + getNbrListUrl + ", getPciUrl=" + getPciUrl + ", getPnfUrl=" + getPnfUrl + ", oofService=" + oofService + ", oofEndpoint=" + oofEndpoint + ", cg=" + cg + ", cid=" + cid
+ + getNbrListUrl + ", getPciUrl=" + getPciUrl + ", getPnfUrl=" + getPnfUrl + ", getRicIdUrl=" + getRicIdUrl + ",oofService=" + oofService + ", oofEndpoint=" + oofEndpoint + ", cg=" + cg + ", cid=" + cid
+ ", pollingInterval=" + pollingInterval + ", pollingTimeout=" + pollingTimeout + ", minCollision="
+ minCollision + ", minConfusion=" + minConfusion + ", sourceId=" + sourceId + ", callbackUrl="
+ callbackUrl + ", pciOptimizer=" + pciOptimizer + ", pciAnrOptimizer=" + pciAnrOptimizer
* ============LICENSE_START=======================================================
* son-handler
* ================================================================================
- * Copyright (C) 2019 Wipro Limited.
+ * Copyright (C) 2019-2022 Wipro Limited.
* ==============================================================================
* 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
- *
+ *
+ * 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.onap.dcaegen2.services.sonhms;
import org.onap.dcaegen2.services.sonhms.dmaap.PolicyDmaapClient;
import org.onap.dcaegen2.services.sonhms.entity.HandOverMetrics;
import org.onap.dcaegen2.services.sonhms.model.AdditionalMeasurements;
+import org.onap.dcaegen2.services.sonhms.model.ANRPayload;
import org.onap.dcaegen2.services.sonhms.model.CellConfig;
import org.onap.dcaegen2.services.sonhms.model.Common;
import org.onap.dcaegen2.services.sonhms.model.Configurations;
import org.onap.dcaegen2.services.sonhms.model.Lte;
import org.onap.dcaegen2.services.sonhms.model.LteCell;
import org.onap.dcaegen2.services.sonhms.model.NeighborListInUse;
+import org.onap.dcaegen2.services.sonhms.model.Neighbours;
import org.onap.dcaegen2.services.sonhms.model.Payload;
import org.onap.dcaegen2.services.sonhms.model.PmNotification;
+import org.onap.dcaegen2.services.sonhms.model.PolicyData;
import org.onap.dcaegen2.services.sonhms.model.Ran;
import org.onap.dcaegen2.services.sonhms.utils.BeanUtil;
import org.onap.dcaegen2.services.sonhms.utils.DmaapUtils;
+import org.onap.dcaegen2.services.sonhms.restclient.ConfigurationClient;
+import org.onap.dcaegen2.services.sonhms.restclient.CpsClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Boolean newEntryFlag = false;
try {
List<HoDetails> hoDetailsList = new ArrayList<>();
- List<LteCell> lteCellList = new ArrayList<>();
+ List<Neighbours> neighbourList = new ArrayList<>();
String srcCellId = pmNotification.getEvent().getCommonEventHeader().getSourceName();
/*
* check whether entry already exists if yes : read the hometrics and update it
.getAdditionalMeasurements()) {
int attemptsCount = Integer.parseInt(additionalMeasurements.getHashMap().get("InterEnbOutAtt_X2HO"));
int successCount = Integer.parseInt(additionalMeasurements.getHashMap().get("InterEnbOutSucc_X2HO"));
- float successRate = ((float) successCount / attemptsCount) * 100;
-
- if (successRate >= badThreshold && successRate <= poorThreshold) { // poor neighbor
- HoDetails hoDetails = new HoDetails();
- hoDetails.setDstCellId(additionalMeasurements.getName());
- hoDetails.setAttemptsCount(attemptsCount);
- hoDetails.setSuccessCount(successCount);
- hoDetails.setSuccessRate(successRate);
- int pc = 1;
- int bc = 0;
- if (dstCellIdPcPair.containsKey(additionalMeasurements.getName())) {
- pc = dstCellIdPcPair.get(additionalMeasurements.getName()) + 1;
- }
- hoDetails.setBadCount(bc);
- hoDetails.setPoorCount(pc);
- hoDetailsList.add(hoDetails);
- log.info("poor neighbor {}", additionalMeasurements.getName());
- } else if (successRate < badThreshold) { // bad neighbor
- log.info(" bad neighbor {}", additionalMeasurements.getName());
- HoDetails hoDetails = new HoDetails();
- hoDetails.setDstCellId(additionalMeasurements.getName());
- hoDetails.setAttemptsCount(attemptsCount);
- hoDetails.setSuccessCount(successCount);
- hoDetails.setSuccessRate(successRate);
- int bc = 1;
- int pc = 0;
- if (dstCellIdBcPair.containsKey(additionalMeasurements.getName())) {
- bc = dstCellIdBcPair.get(additionalMeasurements.getName()) + 1;
- }
- if (dstCellIdPcPair.containsKey(additionalMeasurements.getName())) {
- pc = dstCellIdPcPair.get(additionalMeasurements.getName());
- }
- hoDetails.setBadCount(bc);
- hoDetails.setPoorCount(pc);
- hoDetailsList.add(hoDetails);
- if (bc >= badCountThreshold) {
- LteCell lteCell = new LteCell();
- lteCell.setBlacklisted("true");
- lteCell.setCid(additionalMeasurements.getName());
- lteCell.setPlmnId(additionalMeasurements.getHashMap().get("networkId"));
- lteCell.setPnfName(pmNotification.getEvent().getCommonEventHeader().getReportingEntityName());
- lteCellList.add(lteCell);
- hoDetailsList.remove(hoDetails);
- }
-
- } else if (successRate > poorThreshold) { // good neighbor
- HoDetails hoDetails = new HoDetails();
- hoDetails.setDstCellId(additionalMeasurements.getName());
- hoDetails.setAttemptsCount(attemptsCount);
- hoDetails.setSuccessCount(successCount);
- hoDetails.setSuccessRate(successRate);
- int pc = 0;
- int bc = 0;
- hoDetails.setBadCount(bc);
- hoDetails.setPoorCount(pc);
- hoDetailsList.add(hoDetails);
- log.info("good neighbor {}", additionalMeasurements.getName());
- }
+ int successRate = (int)((float) successCount / attemptsCount) * 100;
+
+ Neighbours neighbourCell = new Neighbours();
+ neighbourCell.setHoKpi(successRate);
+ neighbourCell.setCellId(additionalMeasurements.getName());
+ neighbourCell.setPlmnId(additionalMeasurements.getHashMap().get("networkId"));
+ neighbourCell.setPnfName(pmNotification.getEvent().getCommonEventHeader().getReportingEntityName());
+ neighbourList.add(neighbourCell);
}
- if (!lteCellList.isEmpty()) {
+ if (!neighbourList.isEmpty()) {
log.info("triggering policy to remove bad neighbors");
Flag policyTriggerFlag = BeanUtil.getBean(Flag.class);
}
policyTriggerFlag.setHolder("PM");
- result = sendAnrUpdateToPolicy(pmNotification, lteCellList);
+ result = sendAnrUpdateToPolicy(pmNotification, neighbourList);
log.info("Sent ANR update to policy {}", result);
policyTriggerFlag.setHolder("NONE");
}
}
- private Boolean sendAnrUpdateToPolicy(PmNotification pmNotification, List<LteCell> lteCellList) {
+ private Boolean sendAnrUpdateToPolicy(PmNotification pmNotification, List<Neighbours> neighbourList) {
ObjectMapper mapper = new ObjectMapper();
try {
mapper.setSerializationInclusion(Include.NON_NULL);
- ArrayList<Configurations> configurations = new ArrayList<>();
String cellId = pmNotification.getEvent().getCommonEventHeader().getSourceName();
- Configurations configuration = new Configurations(
- new Data(new FapService(cellId, null,
- new CellConfig(new Lte(new Ran(new Common(cellId),
- new NeighborListInUse(null, lteCellList, String.valueOf(lteCellList.size()))))))),
- null);
- configurations.add(configuration);
- Payload payload = new Payload(configurations);
+ String pnfName = pmNotification.getEvent().getCommonEventHeader().getReportingEntityName();
+ String plmnId = pmNotification.getEvent().getMeasurementFields()
+ .getAdditionalMeasurements().get(0).getHashMap().get("networkId");
+ String ric_id = CpsClient.getRicId(cellId);
+ ANRPayload payload = new ANRPayload("CreatePolicy",1,1,ric_id,
+ (new PolicyData(pnfName,plmnId,cellId,neighbourList)));
log.info("payload : {}", payload);
String anrUpdateString = mapper.writeValueAsString(payload);
ChildThreadUtils childUtils = new ChildThreadUtils(ConfigPolicy.getInstance(), new PnfUtils(),
String requestId = UUID.randomUUID().toString();
String notification = childUtils.getNotificationString(
pmNotification.getEvent().getCommonEventHeader().getReportingEntityName(), requestId,
- anrUpdateString, System.currentTimeMillis(), "ModifyConfigANR");
+ anrUpdateString, System.currentTimeMillis(), "ModifyA1Policy");
log.info("Policy Notification: {}", notification);
Boolean result = policyDmaapClient.sendNotificationToPolicy(notification);
log.info("send notification to policy result {} ", result);
* ============LICENSE_START=======================================================
* son-handler
* ================================================================================
- * Copyright (C) 2019-2021 Wipro Limited.
+ * Copyright (C) 2019-2022 Wipro Limited.
* ==============================================================================
* 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.onap.dcaegen2.services.sonhms.child;
String action) {
String closedLoopControlName = "";
- if (action.equals("ModifyConfig")) {
- closedLoopControlName = "ControlLoop-vPCI-fb41f388-a5f2-11e8-98d0-529269fb1459";
+ String policyName = "";
+ if (action.equals("ModifyO1Config")) {
+ closedLoopControlName = "ControlLoop-SONO1-fb41f388-a5f2-11e8-98d0-529269fb1459";
+ policyName = "SONO1";
try {
closedLoopControlName = (String) configPolicy.getConfig().get("PCI_MODCONFIG_POLICY_NAME");
} catch (NullPointerException e) {
}
}
else {
- closedLoopControlName = "ControlLoop-vSONH-7d4baf04-8875-4d1f-946d-06b874048b61";
+ closedLoopControlName = "ControlLoop-SONA1-7d4baf04-8875-4d1f-946d-06b874048b61";
+ policyName = "SONA1";
try {
closedLoopControlName = (String) configPolicy.getConfig().get("PCI_MODCONFIGANR_POLICY_NAME");
} catch (NullPointerException e) {
}
PolicyNotification policyNotification = new PolicyNotification(closedLoopControlName, requestId, alarmStartTime,
- pnfName, action);
+ pnfName, action, policyName);
policyNotification.setClosedLoopControlName(closedLoopControlName);
policyNotification.setPayload(payloadString);
+ policyNotification.setPolicyName(policyName);
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
String requestId = UUID.randomUUID().toString();
String notification = getNotificationString(pnfName, requestId, payloadString,
- System.currentTimeMillis(), "ModifyConfig");
+ System.currentTimeMillis(), "ModifyO1Config");
log.info("Policy Notification: {}", notification);
boolean status = policyDmaapClient.sendNotificationToPolicy(notification);
log.debug("sent Message: {}", status);
}
String requestId = UUID.randomUUID().toString();
String notification = getNotificationString(pnfName, requestId, payloadString,
- System.currentTimeMillis(), "ModifyConfigANR");
+ System.currentTimeMillis(), "ModifyA1Policy");
log.info("Policy Notification: {}", notification);
Boolean result = policyDmaapClient.sendNotificationToPolicy(notification);
log.info("send notification to policy result {} ", result);
--- /dev/null
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * son-handler
+ * ================================================================================
+ * Copyright (C) 2022 Wipro Limited.
+ * ==============================================================================
+ * 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.onap.dcaegen2.services.sonhms.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.List;
+
+/**
+ * Model class for payload for A1 based control loop
+ */
+
+public class ANRPayload {
+
+ @JsonProperty("action")
+ private String action;
+
+ @JsonProperty("policy_id")
+ private int policy_id;
+
+ @JsonProperty("policy_type_id")
+ private int policy_type_id;
+
+ @JsonProperty("ric_id")
+ private String ric_id;
+
+ @JsonProperty("policy_data")
+ private PolicyData policy_data;
+
+ /**
+ * Constructor
+ */
+
+ public ANRPayload() {
+
+ }
+
+ /**
+ * Constructor
+ */
+
+ public ANRPayload(String action, int policy_id, int policy_type_id, String ric_id, PolicyData policy_data) {
+ super();
+ this.action = action;
+ this.policy_id = policy_id;
+ this.policy_type_id = policy_type_id;
+ this.ric_id = ric_id;
+ this.policy_data=policy_data;
+ }
+
+ public String getAction() {
+ return action;
+ }
+
+ public void setAction(String action) {
+ this.action = action;
+ }
+
+ public int getPolicyId(){
+ return policy_id;
+ }
+ public void setPolicyId(int policy_id){
+ this.policy_id = policy_id;
+ }
+
+ public int getPolicyTypeId(){
+ return policy_type_id;
+ }
+
+ public void setPolicyTypeId(int policy_type_id){
+ this.policy_type_id = policy_type_id;
+ }
+
+ public String getRicId(){
+ return ric_id;
+ }
+
+ public void setRicId(String ric_id){
+ this.ric_id = ric_id;
+ }
+
+ public PolicyData getPolicyData(){
+ return policy_data;
+ }
+
+ public void setPolicyData(PolicyData policy_data){
+ this.policy_data = policy_data;
+ }
+
+ @Override
+ public String toString() {
+ return "Payload [=" + action + "]";
+
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * son-handler
+ * ================================================================================
+ * Copyright (C) 2022 Wipro Limited.
+ * ==============================================================================
+ * 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.onap.dcaegen2.services.sonhms.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public enum Action {
+
+ CreatePolicy,
+ DeletePolicy,
+ GetPolicyStatus
+
+}
--- /dev/null
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * son-handler
+ * ================================================================================
+ * Copyright (C) 2022 Wipro Limited.
+ * ==============================================================================
+ * 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.onap.dcaegen2.services.sonhms.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.List;
+
+/**
+ * Model class for neighbour details within the payload
+ * for A1 based control loop
+ */
+
+public class Neighbours {
+
+ @JsonProperty("PNFName")
+ private String pnfName;
+
+ @JsonProperty("PLMNID")
+ private String plmnId;
+
+ @JsonProperty("CellID")
+ private String cellId;
+
+ @JsonProperty("ho-kpi1")
+ private int hoKpi;
+
+ public Neighbours() {
+
+ }
+
+ /**
+ * Parameterized Constructor.
+ */
+ public Neighbours(String pnfName, String plmnId, String cellId, int hoKpi) {
+ super();
+ this.pnfName = pnfName;
+ this.plmnId = plmnId;
+ this.cellId = cellId;
+ this.hoKpi = hoKpi;
+ }
+
+ public String getPnfName() {
+ return pnfName;
+ }
+
+ public void setPnfName(String pnfName) {
+ this.pnfName = pnfName;
+ }
+
+ public String getPlmnId() {
+ return plmnId;
+ }
+
+ public void setPlmnId(String plmnId) {
+ this.plmnId = plmnId;
+ }
+
+ public String getCellId() {
+ return cellId;
+ }
+
+ public void setCellId(String cellId) {
+ this.cellId = cellId;
+ }
+
+ public int getHoKpi() {
+ return hoKpi;
+ }
+
+ public void setHoKpi(int hoKpi) {
+ this.hoKpi = hoKpi;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * son-handler
+ * ================================================================================
+ * Copyright (C) 2022 Wipro Limited.
+ * ==============================================================================
+ * 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.onap.dcaegen2.services.sonhms.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.List;
+
+public class PolicyData {
+
+ @JsonProperty("PNFName")
+ private String pnfName;
+
+ @JsonProperty("PLMNID")
+ private String plmnId;
+
+ @JsonProperty("CellID")
+ private String cellId;
+
+ @JsonProperty("neighbours")
+ private List<Neighbours> neighbours;
+
+ public PolicyData() {
+
+ }
+
+ /**
+ * Parameterized Constructor.
+ */
+ public PolicyData(String pnfName, String plmnId, String cellId, List<Neighbours> neighbours) {
+ super();
+ this.pnfName = pnfName;
+ this.plmnId = plmnId;
+ this.cellId = cellId;
+ this.neighbours = neighbours;
+ }
+
+ public String getPnfName() {
+ return pnfName;
+ }
+
+ public void setPnfName(String pnfName) {
+ this.pnfName = pnfName;
+ }
+
+ public String getPlmnId() {
+ return plmnId;
+ }
+
+ public void setPlmnId(String plmnId) {
+ this.plmnId = plmnId;
+ }
+
+ public String getCellId() {
+ return cellId;
+ }
+
+ public void setCellId(String cellId) {
+ this.cellId = cellId;
+ }
+
+ public List<Neighbours> getNeighbours() {
+ return neighbours;
+ }
+
+ public void setNeighbours(List<Neighbours> neighbours) {
+ this.neighbours=neighbours;
+ }
+
+}
* ============LICENSE_START=======================================================
* son-handler
* ================================================================================
- * Copyright (C) 2019-2020 Wipro Limited.
+ * Copyright (C) 2019-2022 Wipro Limited.
* ==============================================================================
* 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.onap.dcaegen2.services.sonhms.model;
* Constructor.
*/
public PolicyNotification(String closedLoopControlName, String requestId, Long alarmStartTime, String pnfName,
- String action) {
+ String action, String policyName) {
this.closedLoopControlName = closedLoopControlName;
this.requestId = requestId;
this.closedLoopEventClient = "microservice.PCI";
aai.put("generic-vnf.is-closed-loop-disabled", "false");
aai.put("generic-vnf.prov-status", "ACTIVE");
aai.put("pnf.pnf-name", pnfName);
- this.policyName = "PCI";
+ this.policyName = policyName;
this.policyVersion = "1.0.2";
}
* ============LICENSE_START=======================================================
* son-handler
* ================================================================================
- * Copyright (C) 2021 Wipro Limited.
+ * Copyright (C) 2021-2022 Wipro Limited.
* ==============================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
public abstract int getPci(String cellId) throws ConfigDbNotFoundException, CpsNotFoundException;
- /**
+ /**
* Abstract method to get PNF name from SDNR or CPS based on the client mentioned.
*
* @throws ConfigDbNotFoundException,CpsNotFoundException
* @see org.onap.dcaegen2.services.sonhms.Configuration
*/
public abstract JSONObject getCellData(String cellId) throws ConfigDbNotFoundException, CpsNotFoundException;
-}
\ No newline at end of file
+}
return responseObject;
}
+ /*
+ * Method to get NearRTRIC ID from CPS.
+ *
+ * @throws CpsNotFoundException when request to CPS fails
+ */
+
+ public static String getRicId(String cellId) throws CpsNotFoundException {
+ Configuration configuration = Configuration.getInstance();
+ String requestUrl = configuration.getCpsServiceUrl() + "/" + configuration.getGetRicIdUrl();
+ JSONObject inputparam = new JSONObject();
+ JSONObject reqbody = new JSONObject();
+ inputparam.put("cellId", cellId);
+ reqbody.put("inputParameters", inputparam);
+ String response = sendRequest(requestUrl, reqbody);
+ JSONObject responseObject = new JSONObject(response);
+ return responseObject.getString("idNearRTRIC");
+ }
+
/**
* Method to get CellData name from CPS.
*
return responseObject;
}
- private String sendRequest(String url, JSONObject reqbody) throws CpsNotFoundException {
+ private static String sendRequest(String url, JSONObject reqbody) throws CpsNotFoundException {
ResponseEntity<String> response = SonHandlerRestTemplate.sendPostRequest(url, reqbody.toString(),
new ParameterizedTypeReference<String>() {
});
* ============LICENSE_START=======================================================
* son-handler
* ================================================================================
- * Copyright (C) 2019-2021 Wipro Limited.
+ * Copyright (C) 2019-2022 Wipro Limited.
* ==============================================================================
* 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.onap.dcaegen2.services.sonhms.child;
@SpringBootTest(classes = TestChildThreadUtils.class)
public class TestChildThreadUtils {
- ChildThreadUtils childThreadUtils;
- @Mock
- private SonRequestsRepository repository;
+ ChildThreadUtils childThreadUtils;
+ @Mock
+ private SonRequestsRepository repository;
- @Mock
- private PnfUtils pnfUtils;
- @Mock
- private PolicyDmaapClient policyDmaapClient;
-
- @Mock
- private HandOverMetricsRepository hoMetricRepository;
-
- @Mock
- private HoMetricsComponent hoMetricsComponent;
-
- @InjectMocks
- private ChildThreadUtils childThreadUtils2;
+ @Mock
+ private PnfUtils pnfUtils;
+ @Mock
+ private PolicyDmaapClient policyDmaapClient;
+
+ @Mock
+ private HandOverMetricsRepository hoMetricRepository;
+
+ @Mock
+ private HoMetricsComponent hoMetricsComponent;
+
+ @InjectMocks
+ private ChildThreadUtils childThreadUtils2;
- @Before
- public void setup() {
+ @Before
+ public void setup() {
- ConfigPolicy configPolicy = ConfigPolicy.getInstance();
- Configuration config = Configuration.getInstance();
- config.setConfigClientType("ConfigDB");
- config.setMinCollision(5);
- config.setMinConfusion(5);
- Map<String, Object> configPolicyMap = new HashMap<>();
- configPolicyMap.put("PCI_MODCONFIG_POLICY_NAME", "ControlLoop-vPCI-fb41f388-a5f2-11e8-98d0-529269fb1459");
- configPolicy.setConfig(configPolicyMap);
- childThreadUtils = new ChildThreadUtils(configPolicy, pnfUtils, policyDmaapClient, hoMetricsComponent);
- MockitoAnnotations.initMocks(this);
-
- }
+ ConfigPolicy configPolicy = ConfigPolicy.getInstance();
+ Configuration config = Configuration.getInstance();
+ config.setConfigClientType("ConfigDB");
+ config.setMinCollision(5);
+ config.setMinConfusion(5);
+ Map<String, Object> configPolicyMap = new HashMap<>();
+ configPolicyMap.put("PCI_MODCONFIG_POLICY_NAME", "ControlLoop-SONO1-fb41f388-a5f2-11e8-98d0-529269fb1459");
+ configPolicy.setConfig(configPolicyMap);
+ childThreadUtils = new ChildThreadUtils(configPolicy, pnfUtils, policyDmaapClient, hoMetricsComponent);
+ MockitoAnnotations.initMocks(this);
+
+ }
- @Test
- public void savePciRequestTest() {
- SonRequests sonRequest = new SonRequests();
- sonRequest.setTransactionId("transactionId");
- sonRequest.setChildThreadId(1L);
- PowerMockito.mockStatic(BeanUtil.class);
- PowerMockito.when(BeanUtil.getBean(SonRequestsRepository.class))
- .thenReturn(repository);
- when(repository.save(sonRequest)).thenReturn(sonRequest);
- childThreadUtils2.saveRequest("transactionId",1L);;
- assertEquals(sonRequest, repository.save(sonRequest));
- }
+ @Test
+ public void savePciRequestTest() {
+ SonRequests sonRequest = new SonRequests();
+ sonRequest.setTransactionId("transactionId");
+ sonRequest.setChildThreadId(1L);
+ PowerMockito.mockStatic(BeanUtil.class);
+ PowerMockito.when(BeanUtil.getBean(SonRequestsRepository.class))
+ .thenReturn(repository);
+ when(repository.save(sonRequest)).thenReturn(sonRequest);
+ childThreadUtils2.saveRequest("transactionId",1L);;
+ assertEquals(sonRequest, repository.save(sonRequest));
+ }
- @Test
- public void triggerOrWaitTest() {
- Map<String, ArrayList<Integer>> collisionConfusionResult = new HashMap<String, ArrayList<Integer>>();
- ArrayList<Integer> list = new ArrayList<Integer>();
- list.add(6);
- list.add(7);
- collisionConfusionResult.put("cellId", list);
+ @Test
+ public void triggerOrWaitTest() {
+ Map<String, ArrayList<Integer>> collisionConfusionResult = new HashMap<String, ArrayList<Integer>>();
+ ArrayList<Integer> list = new ArrayList<Integer>();
+ list.add(6);
+ list.add(7);
+ collisionConfusionResult.put("cellId", list);
- Boolean result = childThreadUtils.triggerOrWait(collisionConfusionResult);
- assertTrue(result);
- Map<String, ArrayList<Integer>> collisionConfusionResult1 = new HashMap<String, ArrayList<Integer>>();
+ Boolean result = childThreadUtils.triggerOrWait(collisionConfusionResult);
+ assertTrue(result);
+ Map<String, ArrayList<Integer>> collisionConfusionResult1 = new HashMap<String, ArrayList<Integer>>();
- ArrayList<Integer> list1 = new ArrayList<Integer>();
- list1.add(1);
- list1.add(2);
- collisionConfusionResult1.put("cell1", list1);
- result = childThreadUtils.triggerOrWait(collisionConfusionResult1);
- assertFalse(result);
+ ArrayList<Integer> list1 = new ArrayList<Integer>();
+ list1.add(1);
+ list1.add(2);
+ collisionConfusionResult1.put("cell1", list1);
+ result = childThreadUtils.triggerOrWait(collisionConfusionResult1);
+ assertFalse(result);
- }
+ }
- @Test
- public void getNotificationStringTest() {
+ @Test
+ public void getNotificationStringTest() {
- String policy_notif = readFromFile("/policy_notification.json");
- PolicyNotification expected = new PolicyNotification();
- ObjectMapper mapper = new ObjectMapper();
+ String policy_notif = readFromFile("/policy_notification.json");
+ PolicyNotification expected = new PolicyNotification();
+ ObjectMapper mapper = new ObjectMapper();
- try {
- expected = mapper.readValue(policy_notif, PolicyNotification.class);
- } catch (IOException e) {
- e.printStackTrace();
- }
+ try {
+ expected = mapper.readValue(policy_notif, PolicyNotification.class);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
- String pnfName = "ncserver23";
- List<CellPciPair> cellPciPairs = new ArrayList<>();
+ String pnfName = "ncserver23";
+ List<CellPciPair> cellPciPairs = new ArrayList<>();
- cellPciPairs.add(new CellPciPair("Chn0330", 6));
- cellPciPairs.add(new CellPciPair("Chn0331", 7));
- String requestId = "a4130fd5-2291-4a83-8992-04e4c9f32731";
- Long alarmStart = Long.parseLong("1542445563201");
+ cellPciPairs.add(new CellPciPair("Chn0330", 6));
+ cellPciPairs.add(new CellPciPair("Chn0331", 7));
+ String requestId = "a4130fd5-2291-4a83-8992-04e4c9f32731";
+ Long alarmStart = Long.parseLong("1542445563201");
- String result = childThreadUtils.getNotificationString(pnfName, requestId, "payloadString", alarmStart, "ModifyConfig");
- PolicyNotification actual = new PolicyNotification();
- try {
- actual = mapper.readValue(result, PolicyNotification.class);
- } catch (IOException e) {
- e.printStackTrace();
- }
- System.out.println("actual :; "+result+"\nexp "+policy_notif);
- Assert.assertEquals(expected.hashCode(), actual.hashCode());
- }
-
- @Test
- public void sendToPolicyTest() throws Exception {
-
- PowerMockito.mockStatic(SdnrRestClient.class);
- PowerMockito.mockStatic(BeanUtil.class);
- PowerMockito.mockStatic(SdnrRestClient.class);
- PowerMockito.mockStatic(ConfigurationClient.class);
+ String result = childThreadUtils.getNotificationString(pnfName, requestId, "payloadString", alarmStart, "ModifyO1Config");
+ PolicyNotification actual = new PolicyNotification();
+ try {
+ actual = mapper.readValue(result, PolicyNotification.class);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ System.out.println("actual :; "+result+"\nexp "+policy_notif);
+ Assert.assertEquals(expected.hashCode(), actual.hashCode());
+ }
+
+ @Test
+ public void sendToPolicyTest() throws Exception {
- SdnrRestClient sdnr = PowerMockito.spy(new SdnrRestClient());
- Configuration config = Configuration.getInstance();
+ PowerMockito.mockStatic(SdnrRestClient.class);
+ PowerMockito.mockStatic(BeanUtil.class);
+ PowerMockito.mockStatic(SdnrRestClient.class);
+ PowerMockito.mockStatic(ConfigurationClient.class);
- String asyncRspBodyString = readFromFile("/AsyncRespBody.json");
- ObjectMapper mapper = new ObjectMapper();
- AsyncResponseBody async = new AsyncResponseBody();
- try {
+ SdnrRestClient sdnr = PowerMockito.spy(new SdnrRestClient());
+ Configuration config = Configuration.getInstance();
+
+ String asyncRspBodyString = readFromFile("/AsyncRespBody.json");
+ ObjectMapper mapper = new ObjectMapper();
+ AsyncResponseBody async = new AsyncResponseBody();
+ try {
async = mapper.readValue(asyncRspBodyString, AsyncResponseBody.class);
- } catch (Exception e) {
+ } catch (Exception e) {
e.printStackTrace();
- }
+ }
- PowerMockito.whenNew(SdnrRestClient.class).withAnyArguments().thenReturn(sdnr);
- PowerMockito.when(config.getConfigurationClient()).thenReturn(sdnr);
- PowerMockito.doReturn(3).when(sdnr, "getPci", Mockito.anyString());
- PowerMockito.doReturn("pnfName").when(sdnr, "getPnfName", Mockito.anyString());
- when(policyDmaapClient.sendNotificationToPolicy(Mockito.anyString())).thenReturn(true);
- Map<String,List<CellPciPair>> pnfsMap = new HashMap<String,List<CellPciPair>>();
- CellPciPair cell1 = new CellPciPair("cell0", 1);
- CellPciPair cell2 = new CellPciPair("cell1", 2);
- CellPciPair cell3 = new CellPciPair("cell2", 3);
- List<CellPciPair> pciPairList = new ArrayList<>();
- pciPairList.add(cell1);
- pciPairList.add(cell2);
- pciPairList.add(cell3);
- pnfsMap.put("pnf1", pciPairList);
- when(policyDmaapClient.handlePolicyResponse(Mockito.anyString())).thenReturn(true);
- when(pnfUtils.getPnfs(async.getSolutions())).thenReturn(pnfsMap);
- List<String> remNeighbors = new ArrayList<>();
- remNeighbors.add("EXP006");
- Map<String,List<String>> cellRemNeighborsPair = new HashMap<>();
- cellRemNeighborsPair.put("EXP003", remNeighbors);
- List<Map<String,List<String>>> list = new ArrayList<>();
- list.add(cellRemNeighborsPair);
- Map<String, List<Map<String,List<String>>>> expected = new HashMap<>();
- expected.put("pnfName", list);
- when(pnfUtils.getPnfsForAnrSolutions(async.getSolutions().getAnrSolutions())).thenReturn(expected);
- HoDetails hoDetails = new HoDetails();
- hoDetails.setDstCellId("EXP006");
- List<HoDetails> hoDetailsList = new ArrayList<>();
- hoDetailsList.add(hoDetails);
- Either<List<HoDetails>, Integer> hoMetrics = Either.left(hoDetailsList);
- when(hoMetricsComponent.getHoMetrics(Mockito.anyString())).thenReturn(hoMetrics);
- when(hoMetricsComponent.update(Mockito.anyString(), Mockito.anyString())).thenReturn(true);
- assertTrue(childThreadUtils2.sendToPolicy(async));
-
- }
+ PowerMockito.whenNew(SdnrRestClient.class).withAnyArguments().thenReturn(sdnr);
+ PowerMockito.when(config.getConfigurationClient()).thenReturn(sdnr);
+ PowerMockito.doReturn(3).when(sdnr, "getPci", Mockito.anyString());
+ PowerMockito.doReturn("pnfName").when(sdnr, "getPnfName", Mockito.anyString());
+ when(policyDmaapClient.sendNotificationToPolicy(Mockito.anyString())).thenReturn(true);
+ Map<String,List<CellPciPair>> pnfsMap = new HashMap<String,List<CellPciPair>>();
+ CellPciPair cell1 = new CellPciPair("cell0", 1);
+ CellPciPair cell2 = new CellPciPair("cell1", 2);
+ CellPciPair cell3 = new CellPciPair("cell2", 3);
+ List<CellPciPair> pciPairList = new ArrayList<>();
+ pciPairList.add(cell1);
+ pciPairList.add(cell2);
+ pciPairList.add(cell3);
+ pnfsMap.put("pnf1", pciPairList);
+ when(policyDmaapClient.handlePolicyResponse(Mockito.anyString())).thenReturn(true);
+ when(pnfUtils.getPnfs(async.getSolutions())).thenReturn(pnfsMap);
+ List<String> remNeighbors = new ArrayList<>();
+ remNeighbors.add("EXP006");
+ Map<String,List<String>> cellRemNeighborsPair = new HashMap<>();
+ cellRemNeighborsPair.put("EXP003", remNeighbors);
+ List<Map<String,List<String>>> list = new ArrayList<>();
+ list.add(cellRemNeighborsPair);
+ Map<String, List<Map<String,List<String>>>> expected = new HashMap<>();
+ expected.put("pnfName", list);
+ when(pnfUtils.getPnfsForAnrSolutions(async.getSolutions().getAnrSolutions())).thenReturn(expected);
+ HoDetails hoDetails = new HoDetails();
+ hoDetails.setDstCellId("EXP006");
+ List<HoDetails> hoDetailsList = new ArrayList<>();
+ hoDetailsList.add(hoDetails);
+ Either<List<HoDetails>, Integer> hoMetrics = Either.left(hoDetailsList);
+ when(hoMetricsComponent.getHoMetrics(Mockito.anyString())).thenReturn(hoMetrics);
+ when(hoMetricsComponent.update(Mockito.anyString(), Mockito.anyString())).thenReturn(true);
+ assertTrue(childThreadUtils2.sendToPolicy(async));
+ }
- private static String readFromFile(String file) {
- String content = new String();
- try {
+ private static String readFromFile(String file) {
+ String content = new String();
+ try {
- InputStream is = ClusterUtilsTest.class.getResourceAsStream(file);
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
- content = bufferedReader.readLine();
- String temp;
- while ((temp = bufferedReader.readLine()) != null) {
- content = content.concat(temp);
- }
- content = content.trim();
- bufferedReader.close();
- } catch (Exception e) {
- e.printStackTrace();
- content = null;
- }
- return content;
- }
+ InputStream is = ClusterUtilsTest.class.getResourceAsStream(file);
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
+ content = bufferedReader.readLine();
+ String temp;
+ while ((temp = bufferedReader.readLine()) != null) {
+ content = content.concat(temp);
+ }
+ content = content.trim();
+ bufferedReader.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ content = null;
+ }
+ return content;
+ }
}
}
}
+ @Test
+ public void getRicIdTest() {
+ String responseBody = "{\"idNearRTRIC\":\"22\"}";
+ PowerMockito.mockStatic(SonHandlerRestTemplate.class);
+ PowerMockito.mockStatic(Configuration.class);
+ PowerMockito.when(Configuration.getInstance()).thenReturn(configuration);
+ PowerMockito
+ .when(SonHandlerRestTemplate.sendPostRequest(Mockito.anyString(), Mockito.anyString(),
+ Matchers.<ParameterizedTypeReference<String>>any()))
+ .thenReturn(ResponseEntity.ok(responseBody));
+ try {
+ String result = cps.getRicId("1");
+ String response = ResponseEntity.ok(responseBody).getBody();
+ JSONObject respObj = new JSONObject(response);
+ assertEquals(respObj.get("idNearRTRIC"), result);
+ } catch (CpsNotFoundException e) {
+ log.debug("CpsNotFoundException {}", e.toString());
+ }
+ }
+
+
+
@Test
public void getCellData() {
String responseBody = "{\"networkId\":\"netw1000\"}";
{
- "closedLoopControlName": "ControlLoop-vPCI-fb41f388-a5f2-11e8-98d0-529269fb1459",
+ "closedLoopControlName": "ControlLoop-SONO1-fb41f388-a5f2-11e8-98d0-529269fb1459",
"closedLoopAlarmStart": 1542445563201,
"closedLoopEventClient": "microservice.PCI",
"closedLoopEventStatus": "ONSET",
"generic-vnf.is-closed-loop-disabled": "false",
"pnf.pnf-name": "ncserver23"
},
- "Action": "ModifyConfig"
+ "Action": "ModifyO1Config"
}
###############################################################################
major=2
minor=1
-patch=8
+patch=9
base_version=${major}.${minor}.${patch}
release_version=${base_version}
snapshot_version=${base_version}-SNAPSHOT