--- /dev/null
+/*
+ * Copyright © 2022 Orange, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.servicehandler.validation.checks;
+
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliency;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class to check compliance of service-resiliency input.
+ */
+public final class ServicehandlerServiceResiliencyCheck {
+
+ private static final Logger LOG = LoggerFactory.getLogger(ServicehandlerServiceResiliencyCheck.class);
+ public static final String LOG_ATTRIBUTE_NOT_DEDICATED = "An attribute not dedicated for this type of "
+ + "resiliency was filled";
+ public static final String LOG_RESILIENCY_TYPE_UNMANAGED = "Resiliency unmanaged for compliance check !";
+ public static final String LOG_RESILIENCY_NULL = "Resiliency is null !";
+
+ /**
+ * Function to check coherency of service-resiliency inputs.
+ *
+ * @param serviceResiliency ServiceResiliency to check
+ * @return <code> true </code> if coherent
+ * <code> false </code> otherwise
+ */
+ public static ComplianceCheckResult check(ServiceResiliency serviceResiliency) {
+ if (serviceResiliency.getResiliency() != null) {
+ switch (serviceResiliency.getResiliency().getSimpleName()) {
+ case "Unprotected":
+ return checkUnprotectedResiliency(serviceResiliency);
+
+ case "UnprotectedDiverselyRouted":
+ return checkUnprotectedDiverselyRoutedResiliency(serviceResiliency);
+
+ case "Protected":
+ return checkProtectedResiliency(serviceResiliency);
+
+ case "Restorable":
+ case "ExternalTriggerRestorable":
+ return checkRestorableAndExternalTriggerRestorableResiliency(serviceResiliency);
+
+ default:
+ LOG.warn(LOG_RESILIENCY_TYPE_UNMANAGED);
+ return new ComplianceCheckResult(false, LOG_RESILIENCY_TYPE_UNMANAGED);
+ }
+ } else {
+ LOG.warn(LOG_RESILIENCY_NULL);
+ return new ComplianceCheckResult(false, LOG_RESILIENCY_NULL);
+ }
+ }
+
+ private static ComplianceCheckResult checkUnprotectedResiliency(ServiceResiliency serviceResiliency) {
+ return serviceResiliency.getRevertive() == null
+ && serviceResiliency.getWaitToRestore() == null
+ && serviceResiliency.getHoldoffTime() == null
+ && serviceResiliency.getPreCalculatedBackupPathNumber() == null
+ && serviceResiliency.getCoupledService() == null
+ ? new ComplianceCheckResult(true, "")
+ : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
+ }
+
+ private static ComplianceCheckResult checkUnprotectedDiverselyRoutedResiliency(
+ ServiceResiliency serviceResiliency) {
+ return serviceResiliency.getRevertive() == null
+ && serviceResiliency.getWaitToRestore() == null
+ && serviceResiliency.getHoldoffTime() == null
+ && serviceResiliency.getPreCalculatedBackupPathNumber() == null
+ ? new ComplianceCheckResult(true, "")
+ : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
+ }
+
+ private static ComplianceCheckResult checkProtectedResiliency(ServiceResiliency serviceResiliency) {
+ return (serviceResiliency.getWaitToRestore() == null
+ || (serviceResiliency.getRevertive() != null && serviceResiliency.getRevertive()))
+ && serviceResiliency.getPreCalculatedBackupPathNumber() == null
+ && serviceResiliency.getCoupledService() == null
+ ? new ComplianceCheckResult(true, "")
+ : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
+ }
+
+ private static ComplianceCheckResult checkRestorableAndExternalTriggerRestorableResiliency(
+ ServiceResiliency serviceResiliency) {
+ return (serviceResiliency.getWaitToRestore() == null
+ || (serviceResiliency.getRevertive() != null && serviceResiliency.getRevertive()))
+ && serviceResiliency.getCoupledService() == null
+ ? new ComplianceCheckResult(true, "")
+ : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
+ }
+
+ private ServicehandlerServiceResiliencyCheck() {
+ }
+}
--- /dev/null
+/*
+ * Copyright © 2022 Orange, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.servicehandler.validation.checks;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Protected;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Restorable;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Unprotected;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.UnprotectedDiverselyRouted;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliencyBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.service.resiliency.CoupledServiceBuilder;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.opendaylight.yangtools.yang.common.Uint8;
+
+@RunWith(MockitoJUnitRunner.class)
+public class CheckCoherencyServiceResiliencyTest {
+
+ @Test
+ public void testCheckWhenResiliencyNull() {
+ ComplianceCheckResult result = ServicehandlerServiceResiliencyCheck.check(
+ new ServiceResiliencyBuilder().setRevertive(true).build());
+
+ Assert.assertFalse(result.hasPassed());
+ Assert.assertEquals(ServicehandlerServiceResiliencyCheck.LOG_RESILIENCY_NULL, result.getMessage());
+ }
+
+ @Test
+ public void testCheckWhenUnprotectedResiliencyWithWrongAttributes() {
+ ServiceResiliencyBuilder input = new ServiceResiliencyBuilder().setResiliency(Unprotected.class);
+
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(input.setRevertive(true).build()).hasPassed());
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setWaitToRestore(Uint64.valueOf(1)).build()).hasPassed());
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setHoldoffTime(Uint64.valueOf(1)).build()).hasPassed());
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setPreCalculatedBackupPathNumber(Uint8.valueOf(1)).build()).hasPassed());
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setCoupledService(new CoupledServiceBuilder().build()).build()).hasPassed());
+ }
+
+ @Test
+ public void testCheckWhenUnprotectedResiliencyWithCorrectAttributes() {
+ Assert.assertTrue(ServicehandlerServiceResiliencyCheck.check(
+ new ServiceResiliencyBuilder()
+ .setResiliency(Unprotected.class)
+ .build())
+ .hasPassed());
+ }
+
+ @Test
+ public void testCheckWhenUnprotectedDiverselyRoutedResiliencyWithWrongAttributes() {
+ ServiceResiliencyBuilder input = new ServiceResiliencyBuilder().setResiliency(UnprotectedDiverselyRouted.class);
+
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(input.setRevertive(true).build()).hasPassed());
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setWaitToRestore(Uint64.valueOf(1)).build()).hasPassed());
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setHoldoffTime(Uint64.valueOf(1)).build()).hasPassed());
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setPreCalculatedBackupPathNumber(Uint8.valueOf(1)).build()).hasPassed());
+ }
+
+ @Test
+ public void testCheckWhenUnprotectedDiverselyRoutedResiliencyWithCorrectAttributes() {
+ Assert.assertTrue(ServicehandlerServiceResiliencyCheck.check(
+ new ServiceResiliencyBuilder().setResiliency(UnprotectedDiverselyRouted.class)
+ .setCoupledService(new CoupledServiceBuilder().build()).build()).hasPassed());
+ }
+
+ @Test
+ public void testCheckWhenProtectedResiliencyWithWrongAttributes() {
+ ServiceResiliencyBuilder input = new ServiceResiliencyBuilder().setResiliency(Protected.class);
+
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setWaitToRestore(Uint64.valueOf(1)).setRevertive(false).build()).hasPassed());
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setPreCalculatedBackupPathNumber(Uint8.valueOf(1)).build()).hasPassed());
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setCoupledService(new CoupledServiceBuilder().build()).build()).hasPassed());
+ }
+
+ @Test
+ public void testCheckWhenProtectedResiliencyWithCorrectAttributes() {
+ Assert.assertTrue(ServicehandlerServiceResiliencyCheck.check(
+ new ServiceResiliencyBuilder()
+ .setResiliency(Protected.class)
+ .setRevertive(true)
+ .setWaitToRestore(Uint64.valueOf(1))
+ .setHoldoffTime(Uint64.valueOf(1))
+ .build())
+ .hasPassed());
+ }
+
+ @Test
+ public void testCheckWhenRestorableOrExternalTriggerRestorableResiliencyWithWrongAttributes() {
+ ServiceResiliencyBuilder input = new ServiceResiliencyBuilder().setResiliency(Restorable.class);
+
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setWaitToRestore(Uint64.valueOf(1)).setRevertive(false).build()).hasPassed());
+ Assert.assertFalse(ServicehandlerServiceResiliencyCheck.check(
+ input.setCoupledService(new CoupledServiceBuilder().build()).build()).hasPassed());
+ }
+
+ @Test
+ public void testCheckWhenRestorableOrExternalTriggerRestorableResiliencyWithCorrectAttributes() {
+ Assert.assertTrue(ServicehandlerServiceResiliencyCheck.check(
+ new ServiceResiliencyBuilder()
+ .setResiliency(Restorable.class)
+ .setRevertive(true)
+ .setWaitToRestore(Uint64.valueOf(1))
+ .setHoldoffTime(Uint64.valueOf(1))
+ .setPreCalculatedBackupPathNumber(Uint8.valueOf(1))
+ .build())
+ .hasPassed());
+ }
+}