Non-RT RIC
==========
-.. Add or remove sections below as appropriate for the platform component.
-
.. toctree::
:maxdepth: 2
:caption: Contents:
./overview.rst
./release-notes.rst
-
-* :ref:`genindex`
-* :ref:`modindex`
* :ref:`search`
Service created.
400:
- Something went wrong with the service registration.
+ The ServiceRegistrationInfo is not accepted.
**Examples:**
/services/keepalive
~~~~~~~~~~~~~~~~~~~
-POST
-++++
+PUT
++++
Heart beat from a service.
Call: ::
- curl -X POST "http://localhost:8081/services/keepalive?name=existing"
+ curl -X PUT "http://localhost:8081/services/keepalive?name=existing"
Result:
200: ::
Call: ::
- curl -X POST "http://localhost:8081/services/keepalive?name=nonexistent"
+ curl -X PUT "http://localhost:8081/services/keepalive?name=nonexistent"
Result:
404: ::
Near |nbh| RT |nbsp| RIC or policy type is not found.
423:
- Near |nbh| RT |nbsp| RIC is locked.
+ Near |nbh| RT |nbsp| RIC is not operational.
**Examples:**
404:
Policy is not found.
+ 423:
+ Near |nbh| RT |nbsp| RIC is not operational.
+
**Examples:**
Call: ::
**Parameters:**
- managedElementId: (*Optional*)
+ managedElementId: (*Required*)
The ID of the Managed Element.
**Responses:**
"policyTypes": [
"string"
],
- "ricName": "string"
+ "ricName": "string",
+ "state": "string"
}
]
"Example_QoETarget_1.0.0",
"ERIC_QoSNudging_0.2.0"
],
- "ricName": "Ric 1"
+ "ricName": "Ric 1",
+ "state": "AVAILABLE"
},
.
.
"policyTypes": [
"STD_PolicyModelUnconstrained_0.2.0"
],
- "ricName": "Ric X"
+ "ricName": "Ric X",
+ "state": "UNAVAILABLE"
}
]
ricName:
type: string
description: identity of the ric
+ state:
+ type: string
+ description: state info
title: RicInfo
ServiceRegistrationInfo:
type: object
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
import java.util.ArrayList;
import java.util.List;
}
public static <T> String createInputJsonString(T params) {
- JSONObject inputJson = new JSONObject();
- inputJson.put("input", gson.toJson(params));
- return inputJson.toString();
+ JsonElement paramsJson = gson.toJsonTree(params);
+ JsonObject jsonObj = new JsonObject();
+ jsonObj.add("input", paramsJson);
+ return gson.toJson(jsonObj);
}
public static Mono<String> getValueFromResponse(String response, String key) {
}
private Mono<Object> assertRicStateIdle(Ric ric) {
- if (ric.getState() == Ric.RicState.IDLE) {
+ if (ric.getState() == Ric.RicState.AVAILABLE) {
return Mono.just("OK");
} else {
RejectionException e = new RejectionException(
@ApiModelProperty(value = "supported policy types")
public final Collection<String> policyTypes;
- RicInfo(String name, Collection<String> managedElementIds, Collection<String> policyTypes) {
+ @ApiModelProperty(value = "state info")
+ public final String state;
+
+ RicInfo(String name, Collection<String> managedElementIds, Collection<String> policyTypes, String state) {
this.ricName = name;
this.managedElementIds = managedElementIds;
this.policyTypes = policyTypes;
+ this.state = state;
}
}
List<RicInfo> result = new ArrayList<>();
for (Ric ric : rics.getRics()) {
if (supportingPolicyType == null || ric.isSupportingType(supportingPolicyType)) {
- result.add(new RicInfo(ric.name(), ric.getManagedElementIds(), ric.getSupportedPolicyTypeNames()));
+ result.add(new RicInfo(ric.name(), ric.getManagedElementIds(), ric.getSupportedPolicyTypeNames(),
+ ric.getState().toString()));
}
}
@Setter
private RicConfig ricConfig;
- private RicState state = RicState.UNDEFINED;
+ private RicState state = RicState.UNAVAILABLE;
private Map<String, PolicyType> supportedPolicyTypes = new HashMap<>();
@Getter
@Setter
/**
* The agent view of the Ric may be inconsistent.
*/
- UNDEFINED,
+ UNAVAILABLE,
/**
* The normal state. Policies can be configured.
*/
- IDLE,
+ AVAILABLE,
/**
* The agent is synchronizing the view of the Ric.
*/
}
private Mono<RicData> checkRicState(RicData ric) {
- if (ric.ric.getState() == RicState.UNDEFINED) {
+ if (ric.ric.getState() == RicState.UNAVAILABLE) {
return startSynchronization(ric) //
.onErrorResume(t -> Mono.empty());
} else if (ric.ric.getState() == RicState.SYNCHRONIZING) {
@Override
protected void hookOnError(Throwable throwable) {
logger.warn("Synchronization failure for ric: {}, reason: {}", ric.name(), throwable.getMessage());
- ric.setState(RicState.UNDEFINED);
+ ric.setState(RicState.UNAVAILABLE);
}
@Override
private void onSynchronizationComplete(Ric ric) {
logger.debug("Synchronization completed for: {}", ric.name());
- ric.setState(RicState.IDLE);
+ ric.setState(RicState.AVAILABLE);
notifyAllServices("Synchronization completed for:" + ric.name());
}
ric.getLock().lockBlocking(LockType.EXCLUSIVE);
ric.getLock().unlockBlocking();
assertThat(ric.getLock().getLockCounter()).isEqualTo(0);
- assertThat(ric.getState()).isEqualTo(Ric.RicState.IDLE);
+ assertThat(ric.getState()).isEqualTo(Ric.RicState.AVAILABLE);
}
}
@Test
public void testSynchronization() throws Exception {
- addRic("ric").setState(Ric.RicState.UNDEFINED);
+ addRic("ric").setState(Ric.RicState.UNAVAILABLE);
String ricName = "ric";
Policy policy2 = addPolicy("policyId2", "typeName", "service", ricName);
Policy policy = addPolicy(policyId, "typeName", "service", ricName); // This should be created in the RIC
supervision.checkAllRics(); // The created policy should be put in the RIC
await().untilAsserted(() -> RicState.SYNCHRONIZING.equals(rics.getRic(ricName).getState()));
- await().untilAsserted(() -> RicState.IDLE.equals(rics.getRic(ricName).getState()));
+ await().untilAsserted(() -> RicState.AVAILABLE.equals(rics.getRic(ricName).getState()));
Policies ricPolicies = getA1Client(ricName).getPolicies();
assertThat(ricPolicies.size()).isEqualTo(1);
String url = putPolicyUrl(serviceName, ricName, policyTypeName, policyInstanceId);
final String policyBody = jsonString();
- this.rics.getRic(ricName).setState(Ric.RicState.IDLE);
+ this.rics.getRic(ricName).setState(Ric.RicState.AVAILABLE);
restClient().put(url, policyBody).block();
url = putPolicyUrl(serviceName, ricName, policyTypeName, policyInstanceId);
this.rics.getRic(ricName).setState(Ric.RicState.SYNCHRONIZING);
testErrorCode(restClient().put(url, policyBody), HttpStatus.LOCKED);
- this.rics.getRic(ricName).setState(Ric.RicState.IDLE);
+ this.rics.getRic(ricName).setState(Ric.RicState.AVAILABLE);
}
@Test
.controllerName("") //
.build();
Ric ric = new Ric(conf);
- ric.setState(Ric.RicState.IDLE);
+ ric.setState(Ric.RicState.AVAILABLE);
this.rics.put(ric);
return ric;
}
package org.oransc.policyagent.clients;
-import com.google.gson.FieldNamingPolicy;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
import java.util.Arrays;
import java.util.Vector;
import reactor.core.publisher.Mono;
public class A1ClientHelper {
- private static Gson gson = new GsonBuilder() //
- .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES) //
- .create();
private A1ClientHelper() {
}
- protected static <T> String createInputJsonString(T inputParams) {
- JSONObject inputJson = new JSONObject();
- inputJson.put("input", gson.toJson(inputParams));
- return inputJson.toString();
- }
-
protected static Mono<String> createOutputJsonResponse(String key, String value) {
JSONObject paramsJson = new JSONObject();
paramsJson.put(key, value);
SdncOnapA1Client.SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
.nearRtRicId(RIC_1_URL) //
.build();
- String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonString = SdncJsonHelper.createInputJsonString(inputParams);
List<String> policyTypeIds = Arrays.asList(POLICY_TYPE_1_ID, POLICY_TYPE_2_ID);
Mono<String> policyTypeIdsResp =
SdncOnapA1Client.SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
.nearRtRicId(RIC_1_URL) //
.build();
- String inputJsonStringGetTypeIds = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonStringGetTypeIds = SdncJsonHelper.createInputJsonString(inputParams);
inputParams = ImmutableSdncOnapAdapterInput.builder() //
.nearRtRicId(RIC_1_URL) //
.policyTypeId(POLICY_TYPE_1_ID) //
.build();
- String inputJsonStringGetPolicyIdsType1 = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonStringGetPolicyIdsType1 = SdncJsonHelper.createInputJsonString(inputParams);
inputParams = ImmutableSdncOnapAdapterInput.builder() //
.nearRtRicId(RIC_1_URL) //
.policyTypeId(POLICY_TYPE_2_ID) //
.build();
- String inputJsonStringGetPolicyIdsType2 = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonStringGetPolicyIdsType2 = SdncJsonHelper.createInputJsonString(inputParams);
List<String> policyTypeIds = Arrays.asList(POLICY_TYPE_1_ID, POLICY_TYPE_2_ID);
Mono<String> policyTypeIdsResp =
.nearRtRicId(RIC_1_URL) //
.policyTypeId(POLICY_TYPE_1_ID) //
.build();
- String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonString = SdncJsonHelper.createInputJsonString(inputParams);
String policyType = "{\"policySchema\": " + POLICY_TYPE_SCHEMA_VALID + ", \"statusSchema\": {} }";
Mono<String> policyTypeResp = A1ClientHelper.createOutputJsonResponse("policy-type", policyType);
.nearRtRicId(RIC_1_URL) //
.policyTypeId(POLICY_TYPE_1_ID) //
.build();
- String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonString = SdncJsonHelper.createInputJsonString(inputParams);
String policyType = "{\"policySchema\": " + POLICY_TYPE_SCHEMA_INVALID + ", \"statusSchema\": {} }";
Mono<String> policyTypeResp = A1ClientHelper.createOutputJsonResponse("policy-type", policyType);
.policyInstance(POLICY_JSON_VALID) //
.properties(new ArrayList<String>()) //
.build();
- String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonString = SdncJsonHelper.createInputJsonString(inputParams);
whenAsyncPostThenReturn(Mono.empty());
.policyTypeId(POLICY_TYPE_1_ID) //
.policyInstanceId(POLICY_1_ID) //
.build();
- String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonString = SdncJsonHelper.createInputJsonString(inputParams);
whenAsyncPostThenReturn(Mono.empty());
SdncOnapA1Client.SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
.nearRtRicId(RIC_1_URL) //
.build();
- String inputJsonStringGetTypeIds = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonStringGetTypeIds = SdncJsonHelper.createInputJsonString(inputParams);
inputParams = ImmutableSdncOnapAdapterInput.builder() //
.nearRtRicId(RIC_1_URL) //
.policyTypeId(POLICY_TYPE_1_ID) //
.build();
- String inputJsonStringGetPolicyIdsType1 = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonStringGetPolicyIdsType1 = SdncJsonHelper.createInputJsonString(inputParams);
inputParams = ImmutableSdncOnapAdapterInput.builder() //
.nearRtRicId(RIC_1_URL) //
.policyTypeId(POLICY_TYPE_2_ID) //
.build();
- String inputJsonStringGetPolicyIdsType2 = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonStringGetPolicyIdsType2 = SdncJsonHelper.createInputJsonString(inputParams);
inputParams = ImmutableSdncOnapAdapterInput.builder() //
.nearRtRicId(RIC_1_URL) //
.policyTypeId(POLICY_TYPE_1_ID) //
.policyInstanceId(POLICY_1_ID) //
.build();
- String inputJsonStringDeletePolicy1 = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonStringDeletePolicy1 = SdncJsonHelper.createInputJsonString(inputParams);
inputParams = ImmutableSdncOnapAdapterInput.builder() //
.nearRtRicId(RIC_1_URL) //
.policyTypeId(POLICY_TYPE_2_ID) //
.policyInstanceId(POLICY_2_ID) //
.build();
- String inputJsonStringDeletePolicy2 = A1ClientHelper.createInputJsonString(inputParams);
+ String inputJsonStringDeletePolicy2 = SdncJsonHelper.createInputJsonString(inputParams);
List<String> policyTypeIds = Arrays.asList(POLICY_TYPE_1_ID, POLICY_TYPE_2_ID);
Mono<String> policyTypeIdsResp =
AdapterRequest expectedParams = ImmutableAdapterRequest.builder() //
.nearRtRicUrl(expUrl) //
.build();
- String expInput = A1ClientHelper.createInputJsonString(expectedParams);
+ String expInput = SdncJsonHelper.createInputJsonString(expectedParams);
verify(asyncRestClientMock).postWithAuthHeader(GET_A1_POLICY_URL, expInput, CONTROLLER_USERNAME,
CONTROLLER_PASSWORD);
AdapterRequest expectedParams = ImmutableAdapterRequest.builder() //
.nearRtRicUrl(policiesUrl()) //
.build();
- String expInput = A1ClientHelper.createInputJsonString(expectedParams);
+ String expInput = SdncJsonHelper.createInputJsonString(expectedParams);
verify(asyncRestClientMock).postWithAuthHeader(GET_A1_POLICY_URL, expInput, CONTROLLER_USERNAME,
CONTROLLER_PASSWORD);
.nearRtRicUrl(expUrl) //
.body(POLICY_JSON_VALID) //
.build();
- String expInput = A1ClientHelper.createInputJsonString(expectedInputParams);
+ String expInput = SdncJsonHelper.createInputJsonString(expectedInputParams);
verify(asyncRestClientMock).postWithAuthHeader(PUT_A1_URL, expInput, CONTROLLER_USERNAME, CONTROLLER_PASSWORD);
}
.nearRtRicUrl(expUrl) //
.body(policyJson) //
.build();
- String expRequest = A1ClientHelper.createInputJsonString(expRequestParams);
+ String expRequest = SdncJsonHelper.createInputJsonString(expRequestParams);
verify(asyncRestClientMock).postWithAuthHeader(PUT_A1_URL, expRequest, CONTROLLER_USERNAME,
CONTROLLER_PASSWORD);
StepVerifier.create(returnedMono)
AdapterRequest expectedInputParams = ImmutableAdapterRequest.builder() //
.nearRtRicUrl(expUrl) //
.build();
- String expInput = A1ClientHelper.createInputJsonString(expectedInputParams);
+ String expInput = SdncJsonHelper.createInputJsonString(expectedInputParams);
verify(asyncRestClientMock).postWithAuthHeader(DELETE_A1_URL, expInput, CONTROLLER_USERNAME,
CONTROLLER_PASSWORD);
String returnedStatus = clientUnderTest.getPolicyStatus(policy).block();
- assertEquals("OK", returnedStatus, "unexpeted status");
+ assertEquals("OK", returnedStatus, "unexpected status");
final String expUrl = policiesUrl() + "/" + POLICY_1_ID + "/status";
AdapterRequest expectedInputParams = ImmutableAdapterRequest.builder() //
.nearRtRicUrl(expUrl) //
.build();
- String expInput = A1ClientHelper.createInputJsonString(expectedInputParams);
+ String expInput = SdncJsonHelper.createInputJsonString(expectedInputParams);
verify(asyncRestClientMock).postWithAuthHeader(GET_A1_POLICY_STATUS_URL, expInput, CONTROLLER_USERNAME,
CONTROLLER_PASSWORD);
}
+ @Test
+ public void testGetVersion() {
+ whenPostReturnOkResponse();
+ A1ProtocolType returnedVersion = clientUnderTest.getProtocolVersion().block();
+ assertEquals(A1ProtocolType.SDNC_OSC_STD_V1_1, returnedVersion, "");
+ }
+
private void whenPostReturnOkResponse() {
AdapterResponse adapterResponse = ImmutableAdapterResponse.builder() //
.body("OK") //
types.clear();
policies.clear();
rics.clear();
- RIC_1.setState(RicState.UNDEFINED);
+ RIC_1.setState(RicState.UNAVAILABLE);
RIC_1.clearSupportedPolicyTypes();
}
@Test
public void whenRicIdleAndNoChangedPoliciesOrPolicyTypes_thenNoSynchronization() {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
RIC_1.addSupportedPolicyType(POLICY_TYPE_1);
rics.put(RIC_1);
@Test
public void whenRicUndefined_thenSynchronization() {
- RIC_1.setState(RicState.UNDEFINED);
+ RIC_1.setState(RicState.UNAVAILABLE);
rics.put(RIC_1);
RicSupervision supervisorUnderTest = spy(new RicSupervision(rics, policies, a1ClientFactory, types, null));
@Test
public void whenRicIdleAndErrorGettingPolicyIdentities_thenNoSynchronization() {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
RIC_1.addSupportedPolicyType(POLICY_TYPE_1);
rics.put(RIC_1);
@Test
public void whenRicIdleAndNotSameAmountOfPolicies_thenSynchronization() {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
rics.put(RIC_1);
policies.put(POLICY_1);
@Test
public void whenRicIdleAndSameAmountOfPoliciesButNotSamePolicies_thenSynchronization() {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
rics.put(RIC_1);
policies.put(POLICY_1);
@Test
public void whenRicIdleAndErrorGettingPolicyTypes_thenNoSynchronization() {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
RIC_1.addSupportedPolicyType(POLICY_TYPE_1);
rics.put(RIC_1);
@Test
public void whenRicIdleAndNotSameAmountOfPolicyTypes_thenSynchronization() {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
RIC_1.addSupportedPolicyType(POLICY_TYPE_1);
rics.put(RIC_1);
.schema("") //
.build();
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
RIC_1.addSupportedPolicyType(POLICY_TYPE_1);
RIC_1.addSupportedPolicyType(policyType2);
rics.put(RIC_1);
policyTypes = new PolicyTypes();
policies = new Policies();
services = new Services();
- RIC_1.setState(RicState.UNDEFINED);
+ RIC_1.setState(RicState.UNAVAILABLE);
RIC_1.clearSupportedPolicyTypes();
}
@Test
public void ricIdlePolicyTypeInRepo_thenSynchronizationWithReuseOfTypeFromRepoAndCorrectServiceNotified() {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
policyTypes.put(POLICY_TYPE_1);
assertThat(policyTypes.size()).isEqualTo(1);
assertThat(policies.size()).isEqualTo(0);
- assertThat(RIC_1.getState()).isEqualTo(RicState.IDLE);
+ assertThat(RIC_1.getState()).isEqualTo(RicState.AVAILABLE);
}
@Test
public void ricIdlePolicyTypeNotInRepo_thenSynchronizationWithTypeFromRic() throws Exception {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
setUpCreationOfA1Client();
simulateRicWithOnePolicyType();
assertThat(policyTypes.size()).isEqualTo(1);
assertThat(policyTypes.getType(POLICY_TYPE_1_NAME).schema()).isEqualTo(typeSchema);
assertThat(policies.size()).isEqualTo(0);
- assertThat(RIC_1.getState()).isEqualTo(RicState.IDLE);
+ assertThat(RIC_1.getState()).isEqualTo(RicState.AVAILABLE);
}
@Test
public void ricIdleAndHavePolicies_thenSynchronizationWithRecreationOfPolicies() {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
policies.put(POLICY_1);
assertThat(policyTypes.size()).isEqualTo(0);
assertThat(policies.size()).isEqualTo(1);
- assertThat(RIC_1.getState()).isEqualTo(RicState.IDLE);
+ assertThat(RIC_1.getState()).isEqualTo(RicState.AVAILABLE);
}
@Test
public void ricIdleAndErrorDeletingPoliciesFirstTime_thenSynchronizationWithDeletionOfPolicies() {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
policies.put(POLICY_1);
assertThat(policyTypes.size()).isEqualTo(0);
assertThat(policies.size()).isEqualTo(0);
- assertThat(RIC_1.getState()).isEqualTo(RicState.IDLE);
+ assertThat(RIC_1.getState()).isEqualTo(RicState.AVAILABLE);
}
@Test
public void ricIdleAndErrorDeletingPoliciesAllTheTime_thenSynchronizationWithFailedRecovery() {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
policies.put(POLICY_1);
assertThat(policyTypes.size()).isEqualTo(0);
assertThat(policies.size()).isEqualTo(0);
- assertThat(RIC_1.getState()).isEqualTo(RicState.UNDEFINED);
+ assertThat(RIC_1.getState()).isEqualTo(RicState.UNAVAILABLE);
}
@Test
public void ricIdlePolicyTypeInRepo_thenSynchronizationWithErrorOnServiceNotificationErrorLogged() {
- RIC_1.setState(RicState.IDLE);
+ RIC_1.setState(RicState.AVAILABLE);
policyTypes.put(POLICY_TYPE_1);