Skip to content
Snippets Groups Projects
Commit fa340e6f authored by Vasilis Katopodis's avatar Vasilis Katopodis
Browse files

Add UpdatePolicyService grpc implementation

parent 615038ca
No related branches found
No related tags found
1 merge request!3feat(policy): policy rule add/update/delete RPCs
...@@ -52,24 +52,23 @@ public class PolicyGatewayImpl implements PolicyGateway { ...@@ -52,24 +52,23 @@ public class PolicyGatewayImpl implements PolicyGateway {
} }
@Override @Override
public Uni<PolicyRuleState> policyAddDevice(PolicyRuleDevice request) { public Uni<PolicyRuleState> policyUpdateService(PolicyRuleService request) {
final var policyRuleDevice = serializer.deserialize(request); final var policyRuleService = serializer.deserialize(request);
return policyService return policyService
.addPolicyDevice(policyRuleDevice) .updatePolicyService(policyRuleService)
.onItem() .onItem()
.transform(serializer::serialize); .transform(serializer::serialize);
} }
@Override @Override
public Uni<PolicyRuleState> policyUpdateService(PolicyRuleService request) { public Uni<PolicyRuleState> policyAddDevice(PolicyRuleDevice request) {
return Uni.createFrom() final var policyRuleDevice = serializer.deserialize(request);
.item(
() -> return policyService
Policy.PolicyRuleState.newBuilder() .addPolicyDevice(policyRuleDevice)
.setPolicyRuleState( .onItem()
request.getPolicyRuleBasic().getPolicyRuleState().getPolicyRuleState()) .transform(serializer::serialize);
.build());
} }
@Override @Override
......
...@@ -70,6 +70,21 @@ public class PolicyRuleConditionValidator { ...@@ -70,6 +70,21 @@ public class PolicyRuleConditionValidator {
return isServiceIdValid; return isServiceIdValid;
} }
public Uni<Boolean> validateUpdatedPolicyRuleId(String updatedPolicyRuleId) {
final var isUpdatedPolicyRuleIdValid = isUpdatedPolicyRuleIdValid(updatedPolicyRuleId);
isUpdatedPolicyRuleIdValid
.subscribe()
.with(
serviceIdBooleanValue -> {
if (Boolean.FALSE.equals(serviceIdBooleanValue)) {
LOGGER.errorf(INVALID_MESSAGE, updatedPolicyRuleId);
}
});
return isUpdatedPolicyRuleIdValid;
}
private Uni<Boolean> isDeviceIdValid(String deviceId) { private Uni<Boolean> isDeviceIdValid(String deviceId) {
return contextService return contextService
.getDevice(deviceId) .getDevice(deviceId)
...@@ -98,4 +113,18 @@ public class PolicyRuleConditionValidator { ...@@ -98,4 +113,18 @@ public class PolicyRuleConditionValidator {
return serviceServiceIdContextId.equals(serviceId.getContextId()) return serviceServiceIdContextId.equals(serviceId.getContextId())
&& serviceServiceIdId.equals(serviceId.getId()); && serviceServiceIdId.equals(serviceId.getId());
} }
private Uni<Boolean> isUpdatedPolicyRuleIdValid(String updatedPolicyRuleId) {
return contextService
.getPolicyRule(updatedPolicyRuleId)
.onItem()
.ifNotNull()
.transform(
id -> {
return true;
})
.onItem()
.ifNull()
.continueWith(false);
}
} }
...@@ -25,5 +25,7 @@ public interface PolicyService { ...@@ -25,5 +25,7 @@ public interface PolicyService {
Uni<PolicyRuleState> addPolicyService(PolicyRuleService policyRuleService); Uni<PolicyRuleState> addPolicyService(PolicyRuleService policyRuleService);
Uni<PolicyRuleState> updatePolicyService(PolicyRuleService policyRuleService);
Uni<PolicyRuleState> addPolicyDevice(PolicyRuleDevice policyRuleDevice); Uni<PolicyRuleState> addPolicyDevice(PolicyRuleDevice policyRuleDevice);
} }
...@@ -81,6 +81,8 @@ public class PolicyServiceImpl implements PolicyService { ...@@ -81,6 +81,8 @@ public class PolicyServiceImpl implements PolicyService {
new PolicyRuleState(PolicyRuleStateEnum.POLICY_INEFFECTIVE); new PolicyRuleState(PolicyRuleStateEnum.POLICY_INEFFECTIVE);
private static final PolicyRuleState EFFECTIVE_POLICYRULE_STATE = private static final PolicyRuleState EFFECTIVE_POLICYRULE_STATE =
new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
private static final PolicyRuleState UPDATED_POLICYRULE_STATE =
new PolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED);
private final ContextService contextService; private final ContextService contextService;
private final MonitoringService monitoringService; private final MonitoringService monitoringService;
...@@ -121,6 +123,59 @@ public class PolicyServiceImpl implements PolicyService { ...@@ -121,6 +123,59 @@ public class PolicyServiceImpl implements PolicyService {
return Long.valueOf(now).doubleValue(); return Long.valueOf(now).doubleValue();
} }
@Override
public Uni<PolicyRuleState> addPolicyService(PolicyRuleService policyRuleService) {
LOGGER.infof("Received %s", policyRuleService);
final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
new Thread(
() -> {
validateService(policyRuleService);
})
.start();
contextService.setPolicyRule(policyRuleBasic);
return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
}
@Override
public Uni<PolicyRuleState> updatePolicyService(PolicyRuleService policyRuleService) {
LOGGER.infof("Received %s", policyRuleService);
final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
new Thread(
() -> {
validateUpdatedPolicyService(policyRuleService);
})
.start();
contextService.setPolicyRule(policyRuleBasic);
return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
}
@Override
public Uni<PolicyRuleState> addPolicyDevice(PolicyRuleDevice policyRuleDevice) {
LOGGER.infof("Received %s", policyRuleDevice);
final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
new Thread(
() -> {
validateDevice(policyRuleDevice);
})
.start();
contextService.setPolicyRule(policyRuleBasic);
return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
}
private void provisionAlarm( private void provisionAlarm(
PolicyRuleBasic policyRuleBasic, PolicyRuleBasic policyRuleBasic,
List<AlarmDescriptor> alarmDescriptorList, List<AlarmDescriptor> alarmDescriptorList,
...@@ -374,6 +429,27 @@ public class PolicyServiceImpl implements PolicyService { ...@@ -374,6 +429,27 @@ public class PolicyServiceImpl implements PolicyService {
return; return;
} }
private void validateUpdatedPolicyService(PolicyRuleService policyRuleService) {
final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
final var isUpdatedPolicyRuleValid =
policyRuleConditionValidator.validateUpdatedPolicyRuleId(policyRuleBasic.getPolicyRuleId());
isUpdatedPolicyRuleValid
.subscribe()
.with(
policyRuleBoolean -> {
if (Boolean.TRUE.equals(isUpdatedPolicyRuleValid)) {
validateService(policyRuleService);
return;
} else {
policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE);
contextService.setPolicyRule(policyRuleBasic);
return;
}
});
}
private void validateService(PolicyRuleService policyRuleService) { private void validateService(PolicyRuleService policyRuleService) {
final var serviceId = policyRuleService.getServiceId(); final var serviceId = policyRuleService.getServiceId();
final var deviceIds = policyRuleService.getDeviceIds(); final var deviceIds = policyRuleService.getDeviceIds();
...@@ -626,41 +702,6 @@ public class PolicyServiceImpl implements PolicyService { ...@@ -626,41 +702,6 @@ public class PolicyServiceImpl implements PolicyService {
getTimeStamp()); getTimeStamp());
} }
@Override
public Uni<PolicyRuleState> addPolicyService(PolicyRuleService policyRuleService) {
LOGGER.infof("Received %s", policyRuleService);
final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
new Thread(
() -> {
validateService(policyRuleService);
})
.start();
contextService.setPolicyRule(policyRuleBasic);
return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
}
@Override
public Uni<PolicyRuleState> addPolicyDevice(PolicyRuleDevice policyRuleDevice) {
LOGGER.infof("Received %s", policyRuleDevice);
final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
new Thread(
() -> {
validateDevice(policyRuleDevice);
})
.start();
contextService.setPolicyRule(policyRuleBasic);
return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
}
private List<String> returnInvalidDeviceIds(List<String> deviceIds) { private List<String> returnInvalidDeviceIds(List<String> deviceIds) {
var invalidDeviceIds = new ArrayList<String>(); var invalidDeviceIds = new ArrayList<String>();
......
...@@ -35,6 +35,8 @@ import java.util.List; ...@@ -35,6 +35,8 @@ import java.util.List;
import java.util.UUID; import java.util.UUID;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
// TODO: Revisit PolicyRuleBasicValidationTest cases after handling exceptions in PolicyRuleBasic
// constructor
@QuarkusTest @QuarkusTest
class PolicyRuleBasicValidationTestHelper { class PolicyRuleBasicValidationTestHelper {
......
...@@ -183,7 +183,7 @@ class PolicyServiceTest { ...@@ -183,7 +183,7 @@ class PolicyServiceTest {
final var expectedPolicyRuleState = final var expectedPolicyRuleState =
Policy.PolicyRuleState.newBuilder() Policy.PolicyRuleState.newBuilder()
.setPolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED) .setPolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED)
.build(); .build();
final var policyRuleBasic = final var policyRuleBasic =
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment