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

Add UpdatePolicyDevice implementation

parent fa340e6f
No related branches found
No related tags found
1 merge request!3feat(policy): policy rule add/update/delete RPCs
......@@ -73,13 +73,12 @@ public class PolicyGatewayImpl implements PolicyGateway {
@Override
public Uni<PolicyRuleState> policyUpdateDevice(PolicyRuleDevice request) {
return Uni.createFrom()
.item(
() ->
Policy.PolicyRuleState.newBuilder()
.setPolicyRuleState(
request.getPolicyRuleBasic().getPolicyRuleState().getPolicyRuleState())
.build());
final var policyRuleDevice = serializer.deserialize(request);
return policyService
.updatePolicyDevice(policyRuleDevice)
.onItem()
.transform(serializer::serialize);
}
@Override
......
......@@ -28,4 +28,6 @@ public interface PolicyService {
Uni<PolicyRuleState> updatePolicyService(PolicyRuleService policyRuleService);
Uni<PolicyRuleState> addPolicyDevice(PolicyRuleDevice policyRuleDevice);
Uni<PolicyRuleState> updatePolicyDevice(PolicyRuleDevice policyRuleDevice);
}
......@@ -176,6 +176,24 @@ public class PolicyServiceImpl implements PolicyService {
return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
}
@Override
public Uni<PolicyRuleState> updatePolicyDevice(PolicyRuleDevice policyRuleDevice) {
LOGGER.infof("Received %s", policyRuleDevice);
final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
new Thread(
() -> {
validateUpdatedPolicyDevice(policyRuleDevice);
})
.start();
contextService.setPolicyRule(policyRuleBasic);
return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
}
private void provisionAlarm(
PolicyRuleBasic policyRuleBasic,
List<AlarmDescriptor> alarmDescriptorList,
......@@ -450,6 +468,27 @@ public class PolicyServiceImpl implements PolicyService {
});
}
private void validateUpdatedPolicyDevice(PolicyRuleDevice policyRuleDevice) {
final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
final var isUpdatedPolicyRuleValid =
policyRuleConditionValidator.validateUpdatedPolicyRuleId(policyRuleBasic.getPolicyRuleId());
isUpdatedPolicyRuleValid
.subscribe()
.with(
policyRuleBoolean -> {
if (Boolean.TRUE.equals(isUpdatedPolicyRuleValid)) {
validateDevice(policyRuleDevice);
return;
} else {
policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE);
contextService.setPolicyRule(policyRuleBasic);
return;
}
});
}
private void validateService(PolicyRuleService policyRuleService) {
final var serviceId = policyRuleService.getServiceId();
final var deviceIds = policyRuleService.getDeviceIds();
......
......@@ -205,15 +205,25 @@ class PolicyServiceTest {
throws ExecutionException, InterruptedException, TimeoutException {
CompletableFuture<String> message = new CompletableFuture<>();
final var expectedDeviceIdUuid =
serializer.serializeUuid("20db867c-772d-4872-9179-244ecafb3257");
final var expectedDeviceId =
ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid).build();
final var expectedPolicyRuleState =
Policy.PolicyRuleState.newBuilder()
.setPolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED)
.setPolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED)
.build();
final var policyRuleBasic =
PolicyRuleBasic.newBuilder().setPolicyRuleState(expectedPolicyRuleState).build();
final var deviceIds = List.of(expectedDeviceId);
final var policyRuleDevice =
Policy.PolicyRuleDevice.newBuilder().setPolicyRuleBasic(policyRuleBasic).build();
Policy.PolicyRuleDevice.newBuilder()
.setPolicyRuleBasic(policyRuleBasic)
.addAllDeviceList(deviceIds)
.build();
client
.policyUpdateDevice(policyRuleDevice)
......
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