aboutsummaryrefslogtreecommitdiffstats
path: root/netconfsimulator/src/it/java/integration/NetconfSimulatorClient.java
diff options
context:
space:
mode:
Diffstat (limited to 'netconfsimulator/src/it/java/integration/NetconfSimulatorClient.java')
-rw-r--r--netconfsimulator/src/it/java/integration/NetconfSimulatorClient.java150
1 files changed, 150 insertions, 0 deletions
diff --git a/netconfsimulator/src/it/java/integration/NetconfSimulatorClient.java b/netconfsimulator/src/it/java/integration/NetconfSimulatorClient.java
new file mode 100644
index 0000000..61f2ef1
--- /dev/null
+++ b/netconfsimulator/src/it/java/integration/NetconfSimulatorClient.java
@@ -0,0 +1,150 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Simulator
+ * ================================================================================
+ * Copyright (C) 2019 Nokia. All rights reserved.
+ * ================================================================================
+ * 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 integration;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.junit.platform.commons.logging.Logger;
+import org.junit.platform.commons.logging.LoggerFactory;
+import org.springframework.util.ResourceUtils;
+
+import java.io.IOException;
+import java.time.Duration;
+import java.time.Instant;
+
+class NetconfSimulatorClient {
+
+ private CloseableHttpClient netconfClient;
+ private String simulatorBaseUrl;
+ private static final Logger LOG = LoggerFactory.getLogger(NetconfSimulatorClient.class);
+
+ NetconfSimulatorClient(String simulatorBaseUrl) {
+ this.netconfClient = HttpClients.createDefault();
+ this.simulatorBaseUrl = simulatorBaseUrl;
+ }
+
+ CloseableHttpResponse loadModel(String moduleName, String yangModelFileName, String initialiConfigFileName) throws IOException {
+ String updateConfigUrl = String.format("%s/netconf/model/%s", simulatorBaseUrl, moduleName);
+ HttpPost httpPost = new HttpPost(updateConfigUrl);
+ HttpEntity updatedConfig = MultipartEntityBuilder
+ .create()
+ .addBinaryBody("yangModel", ResourceUtils.getFile(String.format("classpath:%s", yangModelFileName)))
+ .addBinaryBody("initialConfig", ResourceUtils.getFile(String.format("classpath:%s",initialiConfigFileName)))
+ .addTextBody("moduleName", moduleName)
+ .build();
+ httpPost.setEntity(updatedConfig);
+ return netconfClient.execute(httpPost);
+ }
+
+ CloseableHttpResponse deleteModel(String moduleName) throws IOException {
+ String deleteModuleUrl = String.format("%s/netconf/model/%s", simulatorBaseUrl, moduleName);
+ HttpDelete httpDelete = new HttpDelete(deleteModuleUrl);
+ return netconfClient.execute(httpDelete);
+ }
+
+ boolean isServiceAvailable(Instant startTime, Duration maxWaitingDuration) throws InterruptedException {
+ boolean isServiceReady = false;
+ while (Duration.between(startTime, Instant.now()).compareTo(maxWaitingDuration) < 1){
+ if(checkIfSimResponds()){
+ return true;
+ }
+ else {
+ LOG.info(() -> "Simulator not ready yet, retrying in 5s...");
+ Thread.sleep(5000);
+ }
+ }
+ return isServiceReady;
+ }
+
+ private boolean checkIfSimResponds() throws InterruptedException {
+ try(CloseableHttpResponse pingResponse = getCurrentConfig()){
+ String responseString = getResponseContentAsString(pingResponse);
+ if(pingResponse.getStatusLine().getStatusCode() == 200 && !responseString.trim().isEmpty()){
+ return true;
+ }
+ }
+ catch(IOException ex){
+ LOG.error(ex, () -> "EXCEPTION");
+ Thread.sleep(5000);
+ }
+ return false;
+ }
+
+ CloseableHttpResponse getCurrentConfig() throws IOException {
+ String netconfAddress = String.format("%s/netconf/get", simulatorBaseUrl);
+ HttpGet get = new HttpGet(netconfAddress);
+ return netconfClient.execute(get);
+ }
+
+ CloseableHttpResponse getConfigByModelAndContainerNames(String model, String container) throws IOException {
+ String netconfAddress = String
+ .format("%s/netconf/get/%s/%s", simulatorBaseUrl, model, container);
+ HttpGet get = new HttpGet(netconfAddress);
+ return netconfClient.execute(get);
+ }
+
+ CloseableHttpResponse updateConfig() throws IOException {
+ String updateConfigUrl = String.format("%s/netconf/edit-config", simulatorBaseUrl);
+ HttpPost httpPost = new HttpPost(updateConfigUrl);
+ HttpEntity updatedConfig = MultipartEntityBuilder
+ .create()
+ .addBinaryBody("editConfigXml", ResourceUtils.getFile("classpath:updatedConfig.xml"))
+ .build();
+ httpPost.setEntity(updatedConfig);
+ return netconfClient.execute(httpPost);
+ }
+
+ CloseableHttpResponse getAllConfigChanges() throws IOException {
+ String netconfStoreCmHistoryAddress = String.format("%s/store/cm-history", simulatorBaseUrl);
+ HttpGet configurationChangesResponse = new HttpGet(netconfStoreCmHistoryAddress);
+ return netconfClient.execute(configurationChangesResponse);
+ }
+
+ CloseableHttpResponse getLastConfigChanges(int howManyLastChanges) throws IOException {
+ String netconfStoreCmHistoryAddress = String.format("%s/store/less?offset=%d", simulatorBaseUrl, howManyLastChanges);
+ HttpGet configurationChangesResponse = new HttpGet(netconfStoreCmHistoryAddress);
+ return netconfClient.execute(configurationChangesResponse);
+ }
+
+ void releaseClient() throws IOException {
+ netconfClient.close();
+ }
+
+ void reinitializeClient(){
+ netconfClient = HttpClients.createDefault();
+ }
+
+ String getResponseContentAsString(HttpResponse response) throws IOException {
+ HttpEntity entity = response.getEntity();
+ String entityStringRepr = EntityUtils.toString(entity);
+ EntityUtils.consume(entity);
+ return entityStringRepr;
+ }
+
+}