/**
*****************************************************************************
* Copyright (c) 2016 IBM Corporation and other Contributors.
* 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
*
* Contributors:
* Mike Tran - Initial Contribution
*****************************************************************************
*/
package com.ibm.iotf.client.application.api;
import java.io.IOException;
import java.util.Properties;
import org.junit.FixMethodOrder;
import org.junit.runners.MethodSorters;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.ibm.iotf.client.IoTFCReSTException;
import com.ibm.iotf.client.api.APIClient;
import junit.framework.TestCase;
/**
* This sample showcases various ReST operations that can be performed on Watson IoT Platform to
* add/update/get/Gateway device(s)
*/
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class DeviceManagementExtensionsTest extends TestCase {
private final static String PROPERTIES_FILE_NAME = "/application.properties";
private static boolean setUpIsDone = false;
private static APIClient apiClient = null;
String bundleId = "TEST_BUNDLE_01";
String display_name_local = "en";
String display_name_value = "TEST BUNDLE 01";
String description_local = "en";
String description_value = "TEST BUNDLE 01 DESCRIPTION";
String version = "1.0";
String provider = "Watson IoT Platform Test";
String action_id_1 = "ActionID1";
String action_id_1_display_name_local = "en";
String action_id_1_display_name_value = "Action 1";
String action_id_1_description_local = "en";
String action_id_1_description_value = "Test Action 1";
String parameter_1_name = "Param1";
String parameter_1_value = "^(0|[1-9][0-9]*)$";
boolean parameter_1_required = false;
String parameter_1_default_value = "1000";
public synchronized void setUp() {
if (setUpIsDone) {
return;
}
/**
* Load device properties
*/
Properties props = new Properties();
try {
props.load(DeviceManagementExtensionsTest.class.getResourceAsStream(PROPERTIES_FILE_NAME));
} catch (IOException e1) {
System.err.println("Not able to read the properties file, exiting..");
System.exit(-1);
}
try {
//Instantiate the class by passing the properties file
apiClient = new APIClient(props);
} catch (Exception e) {
// looks like the application.properties file is not updated properly
apiClient = null;
return;
}
setUpIsDone = true;
}
/**
* Expected JSON string when registering a new Device Management Extension:
*
{
"bundleId": "<unique identifier>",
"displayName": {
"<locale 0>": "<localized display name 0>"
},
"description": {
"<locale 0>": "<localized description 0>"
},
"version": "<bundle version>",
"provider": "<bundle provider>",
"actions": {
"<actionId 0>": {
"actionDisplayName": {
"<locale 0>": "<localized action display name 0>"
},
"description": {
"<locale 0>": "<localized description>"
},
"parameters": [
{
"name": "<parameterId>",
"value": "<regex pattern for value checking>",
"required": false,
"defaultValue": "<default>"
}
]
}
}
}
*/
public void test01AddDeviceManagementExtension() {
JsonObject jsonRequest = new JsonObject();
//BundleId
jsonRequest.add("bundleId", new JsonPrimitive(bundleId));
//displayName
JsonObject jsonDisplayName = new JsonObject();
jsonDisplayName.add(display_name_local, new JsonPrimitive(display_name_value));
jsonRequest.add("displayName", jsonDisplayName);
//description
JsonObject jsonDescription = new JsonObject();
jsonDescription.add(description_local, new JsonPrimitive(description_value));
jsonRequest.add("description", jsonDescription);
//version
jsonRequest.add("version", new JsonPrimitive(version));
//provider
jsonRequest.add("provider", new JsonPrimitive(provider));
//Action 1 displayName
JsonObject jsonAction1DisplayName = new JsonObject();
jsonAction1DisplayName.add(action_id_1_display_name_local, new JsonPrimitive(action_id_1_display_name_value));
//Action 1 description
JsonObject jsonAction1Description = new JsonObject();
jsonAction1Description.add(action_id_1_description_local, new JsonPrimitive(action_id_1_description_value));
//parameter1
JsonObject jsonParameter1 = new JsonObject();
jsonParameter1.add("name", new JsonPrimitive(parameter_1_name));
jsonParameter1.add("value", new JsonPrimitive(parameter_1_value));
jsonParameter1.add("required", new JsonPrimitive(parameter_1_required));
jsonParameter1.add("defaultValue", new JsonPrimitive(parameter_1_default_value));
//parameters
JsonArray jsonAction1Parameters = new JsonArray();
jsonAction1Parameters.add(jsonParameter1);
//Action 1
JsonObject jsonAction1 = new JsonObject();
jsonAction1.add("actionDisplayName", jsonAction1DisplayName);
jsonAction1.add("description", jsonAction1Description);
jsonAction1.add("parameters", jsonAction1Parameters);
//actions
JsonObject jsonActions = new JsonObject();
jsonActions.add(action_id_1, jsonAction1);
jsonRequest.add("actions", jsonActions);
System.out.println("ADD " + jsonRequest.toString());
//Add
try {
JsonObject jsonResponse = apiClient.addDeviceManagementExtension(jsonRequest);
System.out.println("Response: " + jsonResponse.toString());
} catch (IoTFCReSTException ex) {
System.err.println(ex.getResponse());
fail(ex.getMessage());
} catch(Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
}
public void test02GetDeviceManagementExtension() {
System.out.println("GET " + bundleId);
//Get
try {
JsonObject jsonResponse = apiClient.getDeviceManagementExtension(bundleId);
System.out.println("Response: " + jsonResponse.toString());
} catch (IoTFCReSTException ex) {
System.err.println(ex.getResponse());
fail(ex.getMessage());
} catch(Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
}
public void test03DeleteDeviceManagementExtension() {
System.out.println("DELETE " + bundleId);
//Delete
try {
apiClient.deleteDeviceManagementExtension(bundleId);
} catch (IoTFCReSTException ex) {
System.err.println(ex.getResponse());
fail(ex.getMessage());
} catch(Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
}
}