fixes to accomodate docker creation in ONF - added onap-enabler parent POM, renamed osam-core to osam-core-framework and removed junit that requires connection to DB
Change-Id: Ifdc95438c8b1e5856860882824a11eecac80e19a
Signed-off-by: Aharoni, Pavel (pa0916) <pavel.aharoni@intl.att.com>
diff --git a/osam-core-framework/core/pom.xml b/osam-core-framework/core/pom.xml
new file mode 100644
index 0000000..ba559c1
--- /dev/null
+++ b/osam-core-framework/core/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--/*-
+ * ============LICENSE_START=======================================================
+ * OSAM Core
+ * ================================================================================
+ * Copyright (C) 2018 Netsia
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>osam-core-framework</artifactId>
+ <groupId>org.onap.osam</groupId>
+ <version>0.0.2</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>core</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>org.onap.osam</groupId>
+ <artifactId>external</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.osam</groupId>
+ <artifactId>api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
diff --git a/osam-core-framework/core/src/main/java/org/onap/osam/core/AbstractBaseServiceImpl.java b/osam-core-framework/core/src/main/java/org/onap/osam/core/AbstractBaseServiceImpl.java
new file mode 100644
index 0000000..ef69df9
--- /dev/null
+++ b/osam-core-framework/core/src/main/java/org/onap/osam/core/AbstractBaseServiceImpl.java
@@ -0,0 +1,72 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OSAM Core
+ * ================================================================================
+ * Copyright (C) 2018 Netsia
+ * ================================================================================
+ * 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.osam.core;
+
+import org.onap.osam.common.exception.NotFoundException;
+import org.onap.osam.model.dao.BaseEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.data.repository.CrudRepository;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * Created by cemturker on 18.09.2018.
+ */
+
+public abstract class AbstractBaseServiceImpl {
+
+ protected Logger log = LoggerFactory.getLogger(this.getClass());
+
+ protected <T extends BaseEntity> T add(T t, CrudRepository<T, Long> repository) {
+ t = repository.save(t);
+ log.info("{} is added",t);
+ return t;
+ }
+
+ protected <T extends BaseEntity> void remove(Long id, CrudRepository<T, Long> repository, Class classz) {
+ repository.deleteById(id);
+ log.info("{} is deleted for {}", id, classz.getName());
+ }
+
+ protected <T extends BaseEntity> T get(Long id, CrudRepository<T, Long> repository) {
+ Optional<T> optional = repository.findById(id);
+ if (!optional.isPresent()) {
+ throw new NotFoundException("id:"+id+" is not found");
+ }
+ return optional.get();
+ }
+
+ protected <T extends BaseEntity> List<T> getAll(CrudRepository<T, Long> repository) {
+ List<T> ts = new ArrayList<>();
+ repository.findAll().iterator().forEachRemaining(ts::add);
+ return Collections.unmodifiableList(ts);
+ }
+
+ protected <T extends BaseEntity> Long count(CrudRepository<T, Long> repository) {
+ return repository.count();
+ }
+}
diff --git a/osam-core-framework/core/src/main/java/org/onap/osam/core/AccessPodServiceImpl.java b/osam-core-framework/core/src/main/java/org/onap/osam/core/AccessPodServiceImpl.java
new file mode 100644
index 0000000..4113d1b
--- /dev/null
+++ b/osam-core-framework/core/src/main/java/org/onap/osam/core/AccessPodServiceImpl.java
@@ -0,0 +1,97 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OSAM Core
+ * ================================================================================
+ * Copyright (C) 2018 Netsia
+ * ================================================================================
+ * 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.osam.core;
+
+import org.onap.osam.external.aai.AaiClient;
+import org.onap.osam.external.aai.model.PNF;
+import org.onap.osam.model.dao.AccessPod;
+import org.onap.osam.common.exception.NotFoundException;
+import org.onap.osam.model.repository.AccessPodRepository;
+import org.onap.osam.api.service.AccessPodService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * Created by cemturker on 26.09.2018.
+ */
+@Service
+public class AccessPodServiceImpl extends AbstractBaseServiceImpl implements AccessPodService {
+
+ private AccessPodRepository accessPodRepository;
+
+ private AaiClient aaiClient;
+
+ @Autowired
+ public AccessPodServiceImpl(AccessPodRepository accessPodRepository, AaiClient aaiClient) {
+ this.accessPodRepository = accessPodRepository;
+ this.aaiClient = aaiClient;
+ }
+
+
+ @Override
+ public AccessPod addOrUpdate(AccessPod value) {
+ //aai logic is commented out, to allow manual registering of SEBA PODs in OSAM Core
+ //PNF pnf = aaiClient.queryPnf(value.getPnfId());
+ Optional<AccessPod> accessPodOptional = accessPodRepository.findByPnfId(value.getPnfId());
+ if (accessPodOptional.isPresent()) {
+ AccessPod tmp = accessPodOptional.get();
+ value.setId(tmp.getId());
+ }
+ add(value,accessPodRepository);
+ //TODO need to update connection to grpc!!
+ return value;
+ }
+
+ @Override
+ public void removeById(Long key) {
+ remove(key,accessPodRepository,AccessPod.class);
+ }
+
+ @Override
+ public AccessPod getById(Long key) {
+ return get(key,accessPodRepository);
+ }
+
+ @Override
+ public List<AccessPod> getAll() {
+ return getAll(accessPodRepository);
+ }
+
+ @Override
+ public AccessPod findByPnfId(String pnfId) {
+ Optional<AccessPod> accessPodOp = accessPodRepository.findByPnfId(pnfId);
+ if (!accessPodOp.isPresent()) {
+ log.error("Access POD with pnfId : {} is not found", pnfId);
+ throw new NotFoundException("Access POD with pnfId : {} is not found", pnfId);
+ }
+ return accessPodOp.get();
+ }
+
+ @Override
+ public void removeByPnfId(String pnfId) {
+ accessPodRepository.removeByPnfId(pnfId);
+ }
+}
diff --git a/osam-core-framework/core/src/main/java/org/onap/osam/core/AlarmServiceImpl.java b/osam-core-framework/core/src/main/java/org/onap/osam/core/AlarmServiceImpl.java
new file mode 100644
index 0000000..57aa5f1
--- /dev/null
+++ b/osam-core-framework/core/src/main/java/org/onap/osam/core/AlarmServiceImpl.java
@@ -0,0 +1,78 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OSAM Core
+ * ================================================================================
+ * Copyright (C) 2018 Netsia
+ * ================================================================================
+ * 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.osam.core;
+
+import org.onap.osam.model.dao.AlarmsAndEvents;
+import org.onap.osam.api.service.AlarmService;
+import org.onap.osam.common.exception.UnknownTypeException;
+import org.onap.osam.model.dao.ActiveAlarmsAndEvents;
+import org.onap.osam.model.dao.HistoricalAlarmsAndEvents;
+import org.onap.osam.model.repository.ActiveAlarmsAndEventsRepository;
+import org.onap.osam.model.repository.HistoricalAlarmsAndEventsRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class AlarmServiceImpl extends AbstractBaseServiceImpl implements AlarmService {
+
+ ActiveAlarmsAndEventsRepository activeAlarmsAndEventsRepository;
+ HistoricalAlarmsAndEventsRepository historicalAlarmsAndEventsRepository;
+
+ @Autowired
+ public AlarmServiceImpl(ActiveAlarmsAndEventsRepository activeAlarmsAndEventsRepository,
+ HistoricalAlarmsAndEventsRepository historicalAlarmsAndEventsRepository){
+ this.activeAlarmsAndEventsRepository = activeAlarmsAndEventsRepository;
+ this.historicalAlarmsAndEventsRepository = historicalAlarmsAndEventsRepository;
+ }
+
+ @Override
+ public List<ActiveAlarmsAndEvents> getActiveAlarmsAndEventsByDate(Date startDate, Date endDate) {
+ return activeAlarmsAndEventsRepository.findAllActiveAlarmsAndEventsByDateLessThanEqualAndDateGreaterThanEqual
+ (endDate,startDate);
+ }
+
+ @Override
+ public List<HistoricalAlarmsAndEvents> getHistoricalAlarmsAndEventsByDate(Date startDate, Date endDate) {
+ return historicalAlarmsAndEventsRepository.findAllHistoricalAlarmsAndEventsByDateLessThanEqualAndDateGreaterThanEqual(endDate,startDate);
+
+ }
+
+ @Override
+ public void addOrUpdate(AlarmsAndEvents alarmsAndEvents) {
+ switch (alarmsAndEvents.getAlarmStatus()){
+ case ACTIVE:
+ add(new ActiveAlarmsAndEvents(alarmsAndEvents),activeAlarmsAndEventsRepository);
+ add(new HistoricalAlarmsAndEvents(alarmsAndEvents),historicalAlarmsAndEventsRepository);
+ break;
+ case DEACTIVE:
+ remove(alarmsAndEvents.getId(),activeAlarmsAndEventsRepository,AlarmsAndEvents.class);
+ add(new HistoricalAlarmsAndEvents(alarmsAndEvents) ,historicalAlarmsAndEventsRepository);
+ break;
+ default:
+ throw new UnknownTypeException("alarm status is unknown" + alarmsAndEvents.getAlarmStatus());
+ }
+ }
+}
diff --git a/osam-core-framework/core/src/main/java/org/onap/osam/core/BroadBandServiceImpl.java b/osam-core-framework/core/src/main/java/org/onap/osam/core/BroadBandServiceImpl.java
new file mode 100644
index 0000000..fa0fdbc
--- /dev/null
+++ b/osam-core-framework/core/src/main/java/org/onap/osam/core/BroadBandServiceImpl.java
@@ -0,0 +1,115 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OSAM Core
+ * ================================================================================
+ * Copyright (C) 2018 Netsia
+ * ================================================================================
+ * 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.osam.core;
+
+import org.onap.osam.model.dao.SpeedProfile;
+import org.onap.osam.model.dao.Service;
+import org.onap.osam.model.dao.TechnologyProfile;
+import org.onap.osam.model.repository.ServiceRepository;
+import org.onap.osam.model.repository.SpeedProfileRepository;
+import org.onap.osam.model.repository.TechnologyProfileRepository;
+import org.onap.osam.api.service.BroadBandService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+/**
+ * Created by cemturker on 18.09.2018.
+ */
+@org.springframework.stereotype.Service
+public class BroadBandServiceImpl extends AbstractBaseServiceImpl implements BroadBandService {
+ private SpeedProfileRepository speedProfileRepository;
+ private TechnologyProfileRepository technologyProfileRepository;
+ private ServiceRepository serviceRepository;
+
+ @Autowired
+ public BroadBandServiceImpl(SpeedProfileRepository speedProfileRepository,
+ TechnologyProfileRepository technologyProfileRepository,
+ ServiceRepository serviceRepository) {
+ super();
+ this.speedProfileRepository = speedProfileRepository;
+ this.technologyProfileRepository = technologyProfileRepository;
+ this.serviceRepository = serviceRepository;
+ }
+
+ @Override
+ public SpeedProfile addSpeedProfile(SpeedProfile speedProfile) {
+ return add(speedProfile, speedProfileRepository);
+ }
+
+ @Override
+ public TechnologyProfile addTechnologyProfile(TechnologyProfile technologyProfile) {
+ return add(technologyProfile,technologyProfileRepository);
+ }
+
+ @Override
+ public Service addService(Service service) {
+ return add(service,serviceRepository);
+ }
+
+ @Override
+ public void removeSpeedProfile(Long id) {
+ remove(id, speedProfileRepository, SpeedProfile.class);
+
+ }
+
+ @Override
+ public void removeTechnologyProfile(Long id) {
+ remove(id, technologyProfileRepository, TechnologyProfile.class);
+ }
+
+ @Override
+ public void removeService(Long id) {
+ remove(id, serviceRepository, Service.class);
+ }
+
+ @Override
+ public SpeedProfile getSpeedProfile(Long id) {
+ return get(id, speedProfileRepository);
+ }
+
+ @Override
+ public TechnologyProfile getTechnologyProfile(Long id) {
+ return get(id, technologyProfileRepository);
+ }
+
+ @Override
+ public Service getService(Long id) {
+ return get(id, serviceRepository);
+ }
+
+ @Override
+ public List<SpeedProfile> getSpeedProfiles() {
+ return getAll(speedProfileRepository);
+ }
+
+ @Override
+ public List<TechnologyProfile> getTechnologyProfiles() {
+ return getAll(technologyProfileRepository);
+ }
+
+ @Override
+ public List<Service> getServices() {
+ return getAll(serviceRepository);
+ }
+}
diff --git a/osam-core-framework/core/src/main/java/org/onap/osam/core/DeviceServiceImpl.java b/osam-core-framework/core/src/main/java/org/onap/osam/core/DeviceServiceImpl.java
new file mode 100644
index 0000000..0d6828f
--- /dev/null
+++ b/osam-core-framework/core/src/main/java/org/onap/osam/core/DeviceServiceImpl.java
@@ -0,0 +1,312 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OSAM Core
+ * ================================================================================
+ * Copyright (C) 2018 Netsia
+ * ================================================================================
+ * 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.osam.core;
+
+import com.google.common.collect.Lists;
+import org.onap.osam.api.service.AccessPodService;
+import org.onap.osam.common.exception.AbstractOLTException;
+import org.onap.osam.common.exception.InvalidOperationException;
+import org.onap.osam.common.exception.NotFoundException;
+import org.onap.osam.api.service.DeviceService;
+import org.onap.osam.common.exception.ServerException;
+import org.onap.osam.external.grpc.AbstractOLTClient;
+import org.onap.osam.model.dao.*;
+import org.onap.osam.model.repository.ChassisRepository;
+import org.onap.osam.model.repository.OLTPortRepository;
+import org.onap.osam.model.repository.OLTSlotRepository;
+import org.onap.osam.model.repository.ONTDeviceRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+
+/**
+ * Created by Zafer Kaban on 18.09.2018.
+ */
+@Service
+public class DeviceServiceImpl extends AbstractBaseServiceImpl implements DeviceService {
+
+ private ChassisRepository chassisRepository;
+ private OLTPortRepository oltPortRepository;
+ private OLTSlotRepository oltSlotRepository;
+ private ONTDeviceRepository ontDeviceRepository;
+ private AbstractOLTClient abstractOLTClient;
+ private AccessPodService accessPodService;
+
+ public static int NUMBER_OF_OLT_PORTS = 16;
+ public static int NUMBER_OF_ONT_DEVICES = 64;
+
+ @Autowired
+ public DeviceServiceImpl(ChassisRepository chassisRepository,
+ OLTPortRepository oltPortRepository,
+ OLTSlotRepository oltSlotRepository,
+ ONTDeviceRepository ontDeviceRepository,
+ AbstractOLTClient abstractOLTClient,
+ AccessPodService accessPodService) {
+ this.chassisRepository = chassisRepository;
+ this.oltPortRepository = oltPortRepository;
+ this.oltSlotRepository = oltSlotRepository;
+ this.ontDeviceRepository = ontDeviceRepository;
+ this.abstractOLTClient = abstractOLTClient;
+ this.accessPodService = accessPodService;
+ }
+
+ @Override
+ public Chassis addChassis(Chassis chassis) {
+ AccessPod accessPod = accessPodService.findByPnfId(chassis.getAccessPod().getPnfId());
+ chassis.setAccessPod(accessPod);
+ abstractOLTClient.createChassis(chassis);
+ return add(chassis, chassisRepository);
+ }
+
+ @Override
+ public void deleteChassis(Long id) {
+ log.info("Deleting chassis, id: {}", id);
+ remove(id, chassisRepository,Chassis.class);
+ }
+
+ public void deleteChassisByClli(String clli) {
+ Optional<Chassis> chassis = chassisRepository.findByClli(clli);
+ if (chassis.isPresent()){
+ Long id = chassis.get().getId();
+ log.trace("Deleting chassis, clli: {}", clli);
+ remove(id, chassisRepository,Chassis.class);
+ } else {
+ log.error("Chassis not found for clli {}, nothing to delete", clli);
+ throw new NotFoundException("Chassis not found for clli {}",clli);
+ }
+ }
+
+ @Override
+ public Chassis getChassisById(Long id) {
+ Optional<Chassis> chassis = chassisRepository.findById(id);
+ if (!chassis.isPresent()) {
+ log.error("Chassis not found for id {}", id);
+ throw new NotFoundException("Chassis not found for id {}",id);
+ }
+ return chassis.get();
+ }
+
+ @Override
+ public Chassis getChassisByClli(String clli) {
+ Optional<Chassis> chassis = chassisRepository.findByClli(clli);
+ if (!chassis.isPresent()) {
+ log.error("Chassis not found for clli {}", clli);
+ throw new NotFoundException("Chassis not found for clli {}",clli);
+ }
+ return chassis.get();
+ }
+
+ @Override
+ public Long getChassisCount() {
+ return chassisRepository.count();
+ }
+
+ @Override
+ public List<Chassis> getByPnfId(String pnfId) {
+ Optional<List<Chassis>> chassisList = chassisRepository.findByAccessPodPnfId(pnfId);
+ if (!chassisList.isPresent()) {
+ log.error("Chassis is not found with pnfId {}", pnfId);
+ throw new NotFoundException("Chassis is not found with pnfId : {}",pnfId);
+ }
+ return chassisList.get();
+ }
+
+ @Override
+ public List<Chassis> getAllChassis() {
+ return Lists.newArrayList(chassisRepository.findAll());
+ }
+
+ @Override
+ public OLTSlot addOLTSlot(OLTSlot oltSlot, Chassis chassis) {
+ Set<OLTSlot> oltSlots = Optional.ofNullable(chassis.getOltSlots()).orElse(new HashSet<>());
+ int size = oltSlots.size();
+ if (size == NUMBER_OF_OLT_PORTS) {
+ log.error("Maximum number of OLTs exceeded, max size per chassis: {}", NUMBER_OF_OLT_PORTS);
+ throw new InvalidOperationException("Maximum number of OLTs exceeded");
+ }
+ oltSlot.setNumber(size+1);
+ oltSlot.setAdminState(AdminState.ENABLED);
+ oltSlot.setOperationalState(ActivityState.ACTIVE);
+ oltSlot.setPortAuthState(ActivityState.ACTIVE);
+ abstractOLTClient.createOLTChassis(oltSlot);
+
+ oltSlot.setChassis(chassis);
+ log.trace("Adding OLT Slot, OLT slot: {}", oltSlot);
+ add(oltSlot, oltSlotRepository);
+ for (int j = 0; j < 16 ; j++) {
+ OLTPort oltPort = new OLTPort();
+ oltPort.setOltSlot(oltSlot);
+ oltPort.setPortNumber(j+1);
+ oltPort.setAdminState(AdminState.ENABLED);
+ oltPort.setPortAuthState(ActivityState.ACTIVE);
+ log.trace("Adding OLT Port on this slot, OLT port: {}", oltPort);
+ add(oltPort, oltPortRepository);
+ }
+ oltSlots.add(oltSlot);
+ chassis.setOltSlots(oltSlots);
+ log.trace("Adding this OLT slot to chassis {}", chassis);
+ chassisRepository.save(chassis);
+ return oltSlot;
+ }
+
+ @Override
+ public void deleteOLTSlot(Long id) {
+ log.info("Deleting OLT slot, id: {}", id);
+ oltSlotRepository.deleteById(id);
+ }
+
+ @Override
+ public OLTSlot getOLTSlotById(Long id) {
+ Optional<OLTSlot> oltSlot = oltSlotRepository.findById(id);
+ if (!oltSlot.isPresent()) {
+ log.error("OLT Slot not found with id {}", id);
+ throw new NotFoundException("OLT Slot not found with id "+id);
+ }
+ return oltSlot.get();
+ }
+
+ @Override
+ public OLTSlot getOLTSlotBySerialNumber(String serialNumber) {
+ Optional<OLTSlot> oltSlot = oltSlotRepository.findBySerialNumber(serialNumber);
+ if (!oltSlot.isPresent()) {
+ log.error("OLT Slot not found with serial number {}", serialNumber);
+ throw new NotFoundException("OLT Slot not found with serialNumber {}",serialNumber);
+ }
+ return oltSlot.get();
+ }
+
+ @Override
+ public List<OLTSlot> getAllOLTSlots() {
+ return Lists.newArrayList(oltSlotRepository.findAll());
+ }
+
+ @Override
+ public void deleteOLTPort(Long id) {
+ log.info("Deleting OLT port, id: {}", id);
+ oltPortRepository.deleteById(id);
+ }
+
+ @Override
+ public OLTPort getOLTPortById(Long id) {
+ Optional<OLTPort> oltPort = oltPortRepository.findById(id);
+ if (!oltPort.isPresent()) {
+ log.error("OLT Port not found, id: {}", id);
+ throw new NotFoundException("OLT Port not found, id {}",id);
+ }
+ return oltPort.get();
+ }
+
+ @Override
+ public ONTDevice provisionONTDevice(ONTDevice ont, OntProvisioningType provisioningType){
+ log.trace("ONT Device provisioning, ONT Device: {}, provisioning type: ");
+ OLTPort oltPort = ont.getOLTPort();
+ int portNumber = oltPort.getPortNumber();
+ OLTSlot oltSlot = oltPort.getOltSlot();
+ int slotNumber = oltSlot.getNumber();
+ Chassis chassis = oltSlot.getChassis();
+ String clli = chassis.getClli();
+ int ontNumber = ont.getNumber();
+ String serialNumber = ont.getSerialNumber();
+ Optional<OLTPort> thePort = oltPortRepository.findByPortNumberAndOltSlot_NumberAndOltSlot_ChassisClli(portNumber,slotNumber,clli);
+ if (thePort.isPresent()) {
+ OLTPort port = thePort.get();
+ log.trace("Port found : {}", thePort);
+ Set<ONTDevice> ontDevices = Optional.ofNullable(port.getOntDevices()).orElse(new HashSet<>());
+
+ ONTDevice ontDevice = new ONTDevice();
+ ontDevice.setSerialNumber(serialNumber);
+ ontDevice.setNumber(ontNumber);
+ ontDevice.setOLTPort(port);
+ ontDevice.setAdminState(AdminState.ENABLED);
+ ontDevice.setOperationalState(ActivityState.ACTIVE);
+ ontDevice.setPortAuthState(ActivityState.ACTIVE);
+ ontDevice.setCTag(ont.getCTag());
+ ontDevice.setSTag(ont.getSTag());
+ ontDevice.setCircuitId(ont.getCircuitId());
+ ontDevice.setNasPortId(ont.getNasPortId());
+
+ //TODO Handle technology and speed profiles later
+ ontDevice.setSpeedProfile(null);
+ ontDevice.setTechProfile(null);
+
+ boolean success = false;
+ if (provisioningType == OntProvisioningType.FULL) {
+ success = abstractOLTClient.provisionOntFull(ont);
+ } else if (provisioningType == OntProvisioningType.PREPROVISION) {
+ success = abstractOLTClient.preProvisionOnt(ont);
+ } else {
+ success = abstractOLTClient.provisionONT(ont);
+ }
+
+ if (success){
+ ontDevice = add(ontDevice, ontDeviceRepository);
+ ontDevices.add(ontDevice);
+ port.setOntDevices(ontDevices);
+ oltPortRepository.save(port);
+ } else {
+ log.error("Failed to process ONTDevice at Abstract OLT, ONTDevice: {}", ont);
+ throw new ServerException("Failed to provision ONTDevice with serial number " + ont.getSerialNumber());
+ }
+
+ } else {
+ log.error("Port not found, port number: {}", portNumber);
+ throw new NotFoundException("Port not found, port number {}",portNumber);
+ }
+ return ont;
+ }
+
+ @Override
+ public void deleteONTDevice(Long id) {
+ log.info("Deleting ONT device port, id: {}", id);
+ ontDeviceRepository.deleteById(id);
+ }
+
+ @Override
+ public ONTDevice getONTDeviceById(Long id) {
+ Optional<ONTDevice> ontDevice = ontDeviceRepository.findById(id);
+ if (!ontDevice.isPresent()) {
+ log.error("Couldn't find ONT Device with ID {}", id);
+ throw new NotFoundException("Couldn't find ONT Device with ID {}",id);
+ }
+ return ontDevice.get();
+ }
+
+ @Override
+ public ONTDevice getONTDeviceBySerialNumber(String serialNumber) {
+ Optional<ONTDevice> ontDevice = ontDeviceRepository.findBySerialNumber(serialNumber);
+ if (!ontDevice.isPresent()) {
+ log.error("Couldn't find ONT Device with serialNumber {}", serialNumber);
+ throw new NotFoundException("Couldn't find ONT Device with serialNumber {}",serialNumber);
+ }
+ return ontDevice.get();
+ }
+
+ @Override
+ public List<ONTDevice> getAllONTDevices() {
+ return Lists.newArrayList(ontDeviceRepository.findAll());
+ }
+}
diff --git a/osam-core-framework/core/src/main/java/org/onap/osam/core/PmConfigsServiceImpl.java b/osam-core-framework/core/src/main/java/org/onap/osam/core/PmConfigsServiceImpl.java
new file mode 100644
index 0000000..b1e3f29
--- /dev/null
+++ b/osam-core-framework/core/src/main/java/org/onap/osam/core/PmConfigsServiceImpl.java
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OSAM Core
+ * ================================================================================
+ * Copyright (C) 2018 Netsia
+ * ================================================================================
+ * 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.osam.core;
+
+import org.onap.osam.model.repository.PmConfigsRepository;
+import org.onap.osam.model.dao.PmConfig;
+import org.onap.osam.model.dao.PmConfigs;
+import org.onap.osam.model.dao.PmGroupConfig;
+import org.onap.osam.model.repository.PmConfigRepository;
+import org.onap.osam.model.repository.PmGroupConfigRepository;
+import org.onap.osam.api.service.PmConfigsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class PmConfigsServiceImpl extends AbstractBaseServiceImpl implements PmConfigsService{
+
+ protected PmConfigRepository pmConfigRepository;
+ protected PmConfigsRepository pmConfigsRepository;
+ protected PmGroupConfigRepository pmGroupConfigRepository;
+
+ @Autowired
+ public PmConfigsServiceImpl(PmConfigRepository pmConfigRepository,PmConfigsRepository pmConfigsRepository,
+ PmGroupConfigRepository pmGroupConfigRepository){
+
+ this.pmConfigRepository=pmConfigRepository;
+ this.pmGroupConfigRepository=pmGroupConfigRepository;
+ this.pmConfigsRepository=pmConfigsRepository;
+ }
+
+
+ @Override
+ public List<PmConfig> getPmConfigByPmConfigsId(Long pmConfigsId) {
+ return pmConfigRepository.getByPmConfigs_Id(pmConfigsId);
+ }
+
+ @Override
+ public List<PmConfig> getPmConfigByPmConfigGroupId(Long pmGroupConfigsId) {
+ return pmConfigRepository.getByPmGroupConfig_Id(pmGroupConfigsId);
+ }
+
+ @Override
+ public void addPmGroupConfig(PmConfig pmConfig) {
+ add(pmConfig,pmConfigRepository);
+ }
+
+ @Override
+ public void addPmGroupConfig(PmGroupConfig pmGroupConfig) {
+ add(pmGroupConfig,pmGroupConfigRepository);
+ }
+
+ @Override
+ public void removePmConfig(Long pmConfigId) {
+ remove(pmConfigId,pmConfigRepository,PmConfig.class);
+ }
+
+ @Override
+ public void removeGroupPmConfig(Long pmGroupConfigId) {
+ remove(pmGroupConfigId,pmGroupConfigRepository,PmGroupConfig.class);
+ }
+
+
+ @Override
+ public PmConfigs addOrUpdate(PmConfigs value) {
+ return add(value,pmConfigsRepository);
+ }
+
+ @Override
+ public void removeById(Long key) {
+ remove(key,pmConfigsRepository,PmConfigs.class);
+ }
+
+ @Override
+ public PmConfigs getById(Long key) {
+ return get(key,pmConfigsRepository);
+ }
+
+ @Override
+ public List<PmConfigs> getAll() {
+ return getAll(pmConfigsRepository);
+ }
+}
diff --git a/osam-core-framework/core/src/main/java/org/onap/osam/core/SubscriberServiceImpl.java b/osam-core-framework/core/src/main/java/org/onap/osam/core/SubscriberServiceImpl.java
new file mode 100644
index 0000000..e295655
--- /dev/null
+++ b/osam-core-framework/core/src/main/java/org/onap/osam/core/SubscriberServiceImpl.java
@@ -0,0 +1,71 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OSAM Core
+ * ================================================================================
+ * Copyright (C) 2018 Netsia
+ * ================================================================================
+ * 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.osam.core;
+
+import org.onap.osam.model.dao.Subscriber;
+import org.onap.osam.model.repository.SubscriberRepository;
+import org.onap.osam.api.service.SubscriberService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * Created by cemturker on 18.09.2018.
+ */
+@Service
+public class SubscriberServiceImpl extends AbstractBaseServiceImpl implements SubscriberService {
+
+ private SubscriberRepository subscriberRepository;
+
+ @Autowired
+ public SubscriberServiceImpl(SubscriberRepository subscriberRepository) {
+ this.subscriberRepository = subscriberRepository;
+ }
+
+ @Override
+ public Subscriber addOrUpdate(Subscriber subscriber) {
+ //TODO Add Check the devices.....
+ return add(subscriber, subscriberRepository);
+ }
+
+ @Override
+ public void removeById(Long id) {
+ remove(id, subscriberRepository, Subscriber.class);
+ }
+
+ @Override
+ public Subscriber getById(Long id) {
+ return get(id, subscriberRepository);
+ }
+
+ @Override
+ public List<Subscriber> getAll() {
+ return getAll(subscriberRepository);
+ }
+
+ @Override
+ public Subscriber getBySubscriberIdentifier(String userIdentifier) {
+ return subscriberRepository.findByUserIdentifier(userIdentifier);
+ }
+}
diff --git a/osam-core-framework/core/src/test/java/org/onap/osam/core/DeviceServiceImplTest.java b/osam-core-framework/core/src/test/java/org/onap/osam/core/DeviceServiceImplTest.java
new file mode 100644
index 0000000..3b974a5
--- /dev/null
+++ b/osam-core-framework/core/src/test/java/org/onap/osam/core/DeviceServiceImplTest.java
@@ -0,0 +1,440 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OSAM Core
+ * ================================================================================
+ * Copyright (C) 2018 Netsia
+ * ================================================================================
+ * 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.osam.core;
+
+import junitparams.JUnitParamsRunner;
+import junitparams.Parameters;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.osam.api.service.AccessPodService;
+import org.onap.osam.api.service.DeviceService;
+import org.onap.osam.common.exception.AbstractOLTException;
+import org.onap.osam.common.exception.InvalidOperationException;
+import org.onap.osam.common.exception.NotFoundException;
+import org.onap.osam.common.exception.ServerException;
+import org.onap.osam.external.grpc.AbstractOLTClient;
+import org.onap.osam.model.dao.*;
+import org.onap.osam.model.repository.ChassisRepository;
+import org.onap.osam.model.repository.OLTPortRepository;
+import org.onap.osam.model.repository.OLTSlotRepository;
+import org.onap.osam.model.repository.ONTDeviceRepository;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.*;
+
+/**
+ * Created by Zafer Kaban on 26.11.2018.
+ */
+
+@RunWith(JUnitParamsRunner.class)
+public class DeviceServiceImplTest {
+
+ private static String TEST_PNF_ID = "TEST_PNF_ID";
+ private static String TEST_CLLI = "TEST_CLLI";
+ private static String TEST_SERIAL = "SERIAL_NUMBER";
+
+ @Mock
+ private ChassisRepository chassisRepository;
+ @Mock
+ private OLTPortRepository oltPortRepository;
+ @Mock
+ private OLTSlotRepository oltSlotRepository;
+ @Mock
+ private ONTDeviceRepository ontDeviceRepository;
+
+ @Mock
+ private AbstractOLTClient abstractOLTClient;
+
+ @Mock
+ private AccessPodService accessPodService;
+
+ @Captor
+ private ArgumentCaptor<ONTDevice> ontDeviceCaptor;
+
+ @Captor
+ private ArgumentCaptor<OLTPort> portCaptor;
+
+
+ private Chassis chassis;
+
+ private AccessPod accessPod;
+
+ private OLTSlot oltSlot;
+
+ private OLTPort oltPort;
+
+ private ONTDevice ontDevice;
+
+ @InjectMocks
+ private DeviceServiceImpl deviceService;
+
+ @Before
+ public void initMocks() {
+ MockitoAnnotations.initMocks(this);
+ accessPod = new AccessPod();
+ accessPod.setPnfId(TEST_PNF_ID);
+ chassis = new Chassis();
+ chassis.setClli(TEST_CLLI);
+ chassis.setAccessPod(accessPod);
+ chassis.setId(1L);
+ oltSlot = new OLTSlot();
+ oltSlot.setId(1L);
+ oltSlot.setNumber(1);
+ oltPort = new OLTPort();
+ oltPort.setId(1L);
+ oltPort.setPortNumber(1);
+ ontDevice = new ONTDevice();
+ ontDevice.setId(1L);
+ ontDevice.setOLTPort(oltPort);
+ oltPort.setOltSlot(oltSlot);
+ oltSlot.setChassis(chassis);
+
+ when(chassisRepository.findByClli(TEST_CLLI)).thenReturn(Optional.ofNullable(chassis));
+ when(chassisRepository.findById(1L)).thenReturn(Optional.ofNullable(chassis));
+ }
+
+ @Test
+ public void whenAddChassis_sunnyFlow(){
+
+ // TEST Sunshine scenario
+ when(accessPodService.findByPnfId(TEST_PNF_ID)).thenReturn(accessPod);
+ when(chassisRepository.save(chassis)).thenReturn(chassis);
+
+ Chassis chassisResult = deviceService.addChassis(chassis);
+ assertThat(chassisResult).isSameAs(chassis);
+ }
+
+
+ @Test
+ public void whenAddChassisPnfNotFound_shouldThrowException() {
+ // TEST when PNF registration does not exist so that Access POD does not exist in OSAM DB
+
+ when(accessPodService.findByPnfId(TEST_PNF_ID)).thenThrow(NotFoundException.class);
+ assertThatThrownBy(() -> deviceService.addChassis(chassis)).isInstanceOf(NotFoundException.class);
+ //verify we save nothing to DB
+ verifyZeroInteractions(chassisRepository);
+ }
+
+ @Test
+ public void whenAddChassisAbstractOltReturnsNull_shouldThrowException() {
+ // TEST grpc failure case
+
+ when(accessPodService.findByPnfId(TEST_PNF_ID)).thenReturn(accessPod);
+ doThrow(AbstractOLTException.class).when(abstractOLTClient).createChassis(chassis);
+ assertThatThrownBy(() -> deviceService.addChassis(chassis)).isInstanceOf(AbstractOLTException.class);
+ //verify we save nothing to DB
+ verifyZeroInteractions(chassisRepository);
+ }
+
+
+ @Test
+ public void whenDeleteChassisById_sunnyFlow() {
+ deviceService.deleteChassis(1L);
+ verify(chassisRepository, times(1)).deleteById(1L);
+ }
+
+ @Test
+ public void whenDeleteChassisByClli_sunnyFlow () {
+ deviceService.deleteChassisByClli(TEST_CLLI);
+ //Test chassis has clli TEST_CLLI and id 1L, thus the verify
+ verify(chassisRepository, times(1)).deleteById(1L);
+ }
+
+
+
+ @Test
+ public void whenGetChassisById_sunnyFlow(){
+ Chassis testChassis = deviceService.getChassisById(1L);
+ assertThat(testChassis).isSameAs(chassis);
+ }
+
+ @Test
+ public void whenGetChassisByNotExistingId_throwNotFoundException(){
+ assertThatThrownBy(() -> deviceService.getChassisById(100L)).isInstanceOf(NotFoundException.class);
+ }
+
+ @Test
+ public void whenGetChassisByTestClli_sunnyFlow(){
+ Chassis testChassis = deviceService.getChassisByClli(TEST_CLLI);
+ assertThat(testChassis).isSameAs(chassis);
+ }
+
+ @Test
+ public void whenGetChassisByNotExistingClli_throwNotFoundException(){
+ assertThatThrownBy(() -> deviceService.getChassisByClli("SOME_FAKE_CLLI")).isInstanceOf(NotFoundException.class);
+ }
+
+ @Test
+ public void whenCountChassis_sunnyFlow(){
+ when(chassisRepository.count()).thenReturn(1L);
+ long count = deviceService.getChassisCount();
+ assertThat(count).isEqualTo(1L);
+ }
+
+ @Test
+ public void whenGetByPnfId_sunnyFlow(){
+ when(chassisRepository.findByAccessPodPnfId(TEST_PNF_ID)).thenReturn(Optional.of(new ArrayList<Chassis>()));
+ ArrayList<Chassis> chassisResult = (ArrayList<Chassis>) deviceService.getByPnfId(TEST_PNF_ID);
+ assertThat(chassisResult).isNotNull();
+ }
+
+
+ @Test
+ public void whenGetByPnfIdNotExisting_shouldThrowException(){
+ assertThatThrownBy(() -> deviceService.getByPnfId("SOME_FAKE_PNFID")).isInstanceOf(NotFoundException.class);
+ }
+
+
+ @Test
+ public void whenGetAllChassis_sunnyFlow() {
+ when(chassisRepository.findAll()).thenReturn(new ArrayList<Chassis>());
+ ArrayList<Chassis> chassisResult = (ArrayList<Chassis>) deviceService.getAllChassis();
+ assertThat(chassisResult).isNotNull();
+ }
+
+
+ @Test
+ public void whenAddOLTSlot_sunnyFlow() {
+
+ Set<OLTSlot> oltSlots = new HashSet<OLTSlot>();
+ chassis.setOltSlots(oltSlots);
+ when(oltSlotRepository.save(oltSlot)).thenReturn(oltSlot);
+ when(abstractOLTClient.createOLTChassis(oltSlot)).thenReturn(TEST_CLLI);
+
+ OLTSlot oltResult = deviceService.addOLTSlot(oltSlot, chassis);
+
+ //verify creation of 16 ports
+ verify(oltPortRepository, times(16)).save(portCaptor.capture());
+ final List<OLTPort> allOltPortsValues = portCaptor.getAllValues();
+ allOltPortsValues.forEach(x -> {
+ assertThat(x.getOltSlot()).isSameAs(oltSlot);
+ assertThat(x.getAdminState()).isEqualTo(AdminState.ENABLED);
+ assertThat(x.getPortAuthState()).isEqualTo(ActivityState.ACTIVE);
+ });
+
+ //verify added to chassis
+ assertThat(chassis.getOltSlots()).hasSize(1);
+
+ //verify oltSlot logic
+ assertThat(oltResult).isSameAs(oltSlot);
+ assertThat(oltResult.getAdminState()).isEqualTo(AdminState.ENABLED);
+ assertThat(oltResult.getOperationalState()).isEqualTo(ActivityState.ACTIVE);
+ assertThat(oltResult.getPortAuthState()).isEqualTo(ActivityState.ACTIVE);
+
+ }
+
+ public void whenAddOLTSlotTooManySlotsOnChassis_shouldThrowException() {
+ //already add 16 slots, cannot add another one
+ Set<OLTSlot> oltSlots = new HashSet<OLTSlot>();
+ for (int i = 0; i < 16; i++) {
+ oltSlots.add(new OLTSlot());
+ }
+ chassis.setOltSlots(oltSlots);
+ assertThatThrownBy(()-> deviceService.addOLTSlot(oltSlot, chassis)).isInstanceOf(InvalidOperationException.class);
+ //verify no DB interactions
+ verifyZeroInteractions(oltSlotRepository, oltPortRepository, chassisRepository);
+ }
+
+ public void whenAddOLTSlotAbstractOLTReturnsNull_shouldThrowException() {
+ when(abstractOLTClient.createOLTChassis(oltSlot)).thenReturn(null);
+ assertThatThrownBy(()-> deviceService.addOLTSlot(oltSlot, chassis)).isInstanceOf(ServerException.class);
+ //verify no DB interactions
+ verifyZeroInteractions(oltSlotRepository, oltPortRepository, chassisRepository);
+ }
+
+ @Test
+ public void whenDeleteOLTSlot_repositoryMethodCalledOnce() {
+ deviceService.deleteOLTSlot(1L);
+ verify(oltSlotRepository, times(1)).deleteById(1L);
+ }
+
+
+ @Test
+ public void whenGetOLTSlotById_sunnyFlow(){
+ when(oltSlotRepository.findById(1L)).thenReturn(Optional.of(oltSlot));
+ OLTSlot oltActualSlot = deviceService.getOLTSlotById(1L);
+ assertThat(oltActualSlot).isSameAs(oltSlot);
+ }
+
+ @Test
+ public void whenGetOLTSlotByIdNotExisting_shouldThrowException(){
+ assertThatThrownBy(()-> deviceService.getOLTSlotById(100L)).isInstanceOf(NotFoundException.class);
+ }
+
+ @Test
+ public void whenGetOLTSlotBySerialId_sunnyFlow() {
+ when(oltSlotRepository.findBySerialNumber(TEST_SERIAL)).thenReturn(Optional.of(oltSlot));
+ OLTSlot oltActualSlot = deviceService.getOLTSlotBySerialNumber(TEST_SERIAL);
+ assertThat(oltActualSlot).isSameAs(oltSlot);
+ }
+
+ @Test
+ public void whenGetOLTSlotBySerialIdNotExisting_shouldThrowException(){
+ assertThatThrownBy(()-> deviceService.getOLTSlotBySerialNumber("SOME_FAKE_SERIAL")).isInstanceOf(NotFoundException.class);
+ }
+
+ @Test
+ public void whenGetAllOLTSlot_sunnyFlow() {
+ final ArrayList<OLTSlot> slotArrayList = new ArrayList<>();
+ when(oltSlotRepository.findAll()).thenReturn(slotArrayList);
+ ArrayList<OLTSlot> oltSlots = (ArrayList<OLTSlot>) deviceService.getAllOLTSlots();
+ assertThat(oltSlots).isEqualTo(slotArrayList);
+ }
+
+ @Test
+ public void whenDeleteOLTPort_sunnyFlow() {
+ deviceService.deleteOLTPort(1L);
+ verify(oltPortRepository, times(1)).deleteById(1L);
+ }
+
+ @Test
+ public void whenGetOLTPort_sunnyFlow() {
+ when(oltPortRepository.findById(1L)).thenReturn(Optional.of(oltPort));
+ final OLTPort actualPort = deviceService.getOLTPortById(1L);
+ assertThat(actualPort).isSameAs(oltPort);
+ }
+
+ @Test
+ public void whenGetOLTPortByIdNotExisting_shouldThrowException(){
+ assertThatThrownBy(()-> deviceService.getOLTPortById(100L)).isInstanceOf(NotFoundException.class);
+ }
+
+ @Test
+ @Parameters(method = "provTypeToTestForOnt")
+ public void whenProvisionONTDevice_sunnyFlow(DeviceService.OntProvisioningType provType) {
+
+
+ //setting up ontDevice
+ ontDevice.setSerialNumber("SOME_SERIAL_NUMBER");
+ ontDevice.setNumber(23);
+ ontDevice.setCTag(111);
+ ontDevice.setSTag(222);
+ ontDevice.setCircuitId("CIRCUIT_ID");
+ ontDevice.setNasPortId("NAS_PORT_ID");
+ ontDevice.setAdminState(AdminState.ENABLED);
+ ontDevice.setOperationalState(ActivityState.ACTIVE);
+ ontDevice.setPortAuthState(ActivityState.ACTIVE);
+
+ when(oltPortRepository.findByPortNumberAndOltSlot_NumberAndOltSlot_ChassisClli(1,1,TEST_CLLI)).thenReturn(Optional.ofNullable(oltPort));
+ when(abstractOLTClient.provisionONT(ontDevice)).thenReturn(true);
+ when(abstractOLTClient.preProvisionOnt(ontDevice)).thenReturn(true);
+ when(abstractOLTClient.provisionOntFull(ontDevice)).thenReturn(true);
+
+ //This is because in order to be inserted to hashset of oltSlots at the next command of tested function,
+ //the ONTDevice has to have ID
+ when(ontDeviceRepository.save(any())).thenReturn(ontDevice);
+
+ deviceService.provisionONTDevice(ontDevice, provType);
+
+ //checking that the copy to persisted object was as expected
+ verify(ontDeviceRepository, times(1)).save(ontDeviceCaptor.capture());
+ final ONTDevice capturedONTDevice = ontDeviceCaptor.getValue();
+
+ //TODO Pavel fix after discussion with Netsia regarding the returned object.
+ //Currently the assert will fail because internal object has no ID.
+ //I didn't want to use isEqualUsingSpecificFields, to catch set operations we might miss in the future
+ //assertThat(capturedONTDevice).isEqualToComparingFieldByField(ontDevice);
+
+ verify(oltPortRepository, times(1)).save(oltPort);
+ }
+
+ private Object[] provTypeToTestForOnt() {
+ return new Object[] {
+ new Object[] { DeviceService.OntProvisioningType.PROVISION },
+ new Object[] { DeviceService.OntProvisioningType.PREPROVISION },
+ new Object[] { DeviceService.OntProvisioningType.FULL }
+ };
+ }
+
+ @Test
+ @Parameters(method = "provTypeToTestForOnt")
+ public void whenAddONTDeviceNoPortFound_shouldThrowException(DeviceService.OntProvisioningType provType) {
+ when(oltPortRepository.findByPortNumberAndOltSlot_NumberAndOltSlot_ChassisClli(1,1,TEST_CLLI)).thenReturn(Optional.ofNullable(null));
+ assertThatThrownBy(()-> deviceService.provisionONTDevice(ontDevice, provType)).isInstanceOf(NotFoundException.class);
+
+ }
+
+ @Test
+ @Parameters(method = "provTypeToTestForOnt")
+ public void whenAddONTDeviceAbstractOLTError_shouldThrowException(DeviceService.OntProvisioningType provType) {
+ when(oltPortRepository.findByPortNumberAndOltSlot_NumberAndOltSlot_ChassisClli(1,1,TEST_CLLI)).thenReturn(Optional.ofNullable(oltPort));
+ when(abstractOLTClient.provisionONT(ontDevice)).thenReturn(false);
+ when(abstractOLTClient.preProvisionOnt(ontDevice)).thenReturn(false);
+ when(abstractOLTClient.provisionOntFull(ontDevice)).thenReturn(false);
+ assertThatThrownBy(()-> deviceService.provisionONTDevice(ontDevice, provType)).isInstanceOf(ServerException.class);
+
+ }
+
+ @Test
+ public void whenDeleteONTDevice_sunnyFlow() {
+ deviceService.deleteONTDevice(1L);
+ verify(ontDeviceRepository, times(1)).deleteById(1L);
+ }
+
+ @Test
+ public void whenGetONTDeviceById_sunnyFlow() {
+ when(ontDeviceRepository.findById(1L)).thenReturn(Optional.of(ontDevice));
+ ONTDevice actualOntDevice = deviceService.getONTDeviceById(1L);
+ assertThat(actualOntDevice).isSameAs(ontDevice);
+ }
+
+ @Test
+ public void whenGetONTDeviceNoId_shouldThrowException() {
+ assertThatThrownBy(()-> deviceService.getONTDeviceById(100L)).isInstanceOf(NotFoundException.class);
+
+ }
+
+ @Test
+ public void whenGetONTDeviceBySerialNumber_sunnyFlow() {
+ when(ontDeviceRepository.findBySerialNumber(TEST_SERIAL)).thenReturn(Optional.of(ontDevice));
+ ONTDevice actualOntDevice = deviceService.getONTDeviceBySerialNumber(TEST_SERIAL);
+ assertThat(actualOntDevice).isSameAs(ontDevice);
+ }
+
+ @Test
+ public void whenGetONTDeviceNoSerialNumber_shouldThrowException() {
+ assertThatThrownBy(()-> deviceService.getONTDeviceBySerialNumber(TEST_SERIAL)).isInstanceOf(NotFoundException.class);
+
+ }
+
+ @Test
+ public void whenGetAllONTDevices_sunnyFlow() {
+ final ArrayList<ONTDevice> devices = new ArrayList<>();
+ devices.add(ontDevice);
+ when(ontDeviceRepository.findAll()).thenReturn(devices);
+ ArrayList<ONTDevice> ontDevices = (ArrayList<ONTDevice>) deviceService.getAllONTDevices();
+ assertThat(ontDevices).isEqualTo(devices);
+ }
+}